1.1 รายการปลั๊กอินที่จะสร้างใน Maven
ชุดประกอบใน Maven สามารถกำหนดค่าได้อย่างยืดหยุ่นมาก นักพัฒนา Maven ได้สร้างปลั๊กอินพิเศษมากมาย ซึ่งคุณสามารถกำหนดค่าบิลด์ต่างๆ ได้อย่างยืดหยุ่น ความนิยมสูงสุดของพวกเขาแสดงไว้ในตารางด้านล่าง:
เสียบเข้าไป | คำอธิบาย | |
---|---|---|
1 | ปลั๊กอินคอมไพเลอร์ Maven | จัดการการคอมไพล์ Java |
2 | ปลั๊กอิน maven-resources | ควบคุมการรวมทรัพยากรในแอสเซมบลี |
3 | ปลั๊กอินซอร์ส Maven | ควบคุมว่าซอร์สโค้ดจะรวมอยู่ในแอสเซมบลีหรือไม่ |
4 | maven-dependency-plugin | ควบคุมกระบวนการคัดลอกไลบรารีอ้างอิง |
5 | ปลั๊กอิน maven-jar | ปลั๊กอินสำหรับสร้างไฟล์ jar สุดท้าย |
6 | ปลั๊กอินสงคราม Maven | ปลั๊กอินสำหรับสร้างไฟล์สงครามครั้งสุดท้าย |
7 | ปลั๊กอิน maven-surefire | จัดการการทดสอบการทำงาน |
8 | buildnumber-maven-ปลั๊กอิน | สร้างหมายเลขบิลด์ |
ปลั๊กอินแต่ละตัวมีความน่าสนใจในแบบของตัวเอง แต่เราจะต้องวิเคราะห์ทั้งหมด เริ่มจากสิ่งสำคัญ - ปลั๊กอินการจัดการการรวบรวม
1.2 ปลั๊กอินการคอมไพล์ maven-compiler-plugin
ปลั๊กอินยอดนิยมที่ให้คุณควบคุมเวอร์ชันของคอมไพเลอร์และใช้ในเกือบทุกโครงการคือmaven-compiler-plugin
. มีการตั้งค่าเริ่มต้น แต่ในเกือบทุกโครงการจำเป็นต้องตั้งค่าใหม่อีกครั้ง
ในเวอร์ชันที่ง่ายที่สุดในปลั๊กอินคุณต้องระบุเวอร์ชันของซอร์สโค้ด Java และเวอร์ชันของเครื่อง Java ที่ใช้ประกอบ:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.11</source>
<target>1.13</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
ในตัวอย่างด้านบน เราตั้งค่าตัวเลือกคอมไพเลอร์ Java สามตัวเลือก: source
และtarget
encoding
พารามิเตอร์source
อนุญาตให้เราตั้งค่าเวอร์ชัน Java สำหรับแหล่งที่มาของเรา พารามิเตอร์target
คือเวอร์ชันของเครื่อง Java ที่คุณต้องการคอมไพล์คลาส หากไม่ได้ระบุโค้ดหรือเวอร์ชันเครื่อง Java ค่าดีฟอลต์คือ 1.3
สุดท้าย พารามิเตอร์encoding
อนุญาตให้คุณระบุการเข้ารหัสของไฟล์ Java เราUTF-8
ระบุ ตอนนี้แหล่งที่มาเกือบทั้งหมดถูกเก็บไว้ในUTF-8
. แต่ถ้าไม่ได้ระบุพารามิเตอร์นี้ ระบบจะเลือกการเข้ารหัสปัจจุบันของระบบปฏิบัติการ สำหรับ Windows นี่คือการเข้ารหัสWindows-1251
.
นอกจากนี้ยังมีบางกรณีที่คอมพิวเตอร์รุ่นติดตั้ง Java หลายรุ่น: เพื่อสร้างโมดูลและ/หรือโครงการที่แตกต่างกัน ในกรณีนี้JAVA_HOME
ตัวแปรสามารถระบุเส้นทางไปยังเส้นทางใดเส้นทางหนึ่งเท่านั้น
นอกจากนี้ยังมีการใช้งานเครื่อง Java ที่แตกต่างกัน: OpenJDK, OracleJDK, Amazon JDK และยิ่งโครงการมีขนาดใหญ่เท่าใด โครงสร้างก็ยิ่งซับซ้อนมากขึ้นเท่านั้น แต่คุณสามารถกำหนดพาธไปยังคอมไพเลอร์ javac สำหรับปลั๊กอินได้อย่างชัดเจนโดยใช้แท็ก
ปลั๊กอินmaven-compiler-plugin
มีสองเป้าหมาย:
compiler:compile
– การรวบรวมแหล่งที่มา โดยค่าเริ่มต้นจะเชื่อมโยงกับเฟสการคอมไพล์compiler:testCompile
– การรวบรวมการทดสอบ โดยค่าเริ่มต้นจะเชื่อมโยงกับเฟสการทดสอบการคอมไพล์
คุณยังสามารถระบุรายการอาร์กิวเมนต์ที่จะส่งผ่านไปยังคอมไพเลอร์ javac ในบรรทัดรับคำสั่ง:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:all,-options,-path<arg>
</compilerArgs>
</configuration>
</plugin>
1.3 ปลั๊กอินสำหรับสร้างไฟล์ jar maven-jar-plugin
หากคุณต้องการสร้างไลบรารี่ jar ของคุณเองด้วย Maven คุณจะต้องใช้ปลั๊กอิน maven-jar ปลั๊กอินนี้ทำสิ่งที่มีประโยชน์มากมาย
ตัวอย่างของปลั๊กอินดังกล่าว:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<includes>
<include>**/properties/*</include>
</includes>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
ขั้นแรก สามารถใช้เพื่อระบุว่าไฟล์ใดจะเข้าไลบรารีและไฟล์ใดจะไม่เข้า เมื่อใช้แท็กใน<include>
ส่วน<includes>
คุณสามารถระบุรายการไดเร็กทอรีที่ต้องการเพิ่มเนื้อหาลงในไลบรารี
ประการที่สอง แต่ละ jar ต้องมีรายการ ( ไฟล์ MANIFEST.MF ) ปลั๊กอินจะวางไว้ในตำแหน่งที่ถูกต้องในไลบรารีคุณเพียงแค่ต้องระบุเส้นทางที่จะใช้ แท็กใช้สำหรับสิ่ง<manifestFile>
นี้
สุดท้าย ปลั๊กอินสามารถสร้างรายการด้วยตัวเอง ในการดำเนินการนี้ แทนที่จะใช้แท็ก<manifestFile>
คุณต้องเพิ่มแท็ก<manifest>
และระบุข้อมูลสำหรับรายการในอนาคตในนั้น ตัวอย่าง:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
แท็ก<addClasspath>
ระบุว่าจะเพิ่มในรายการหรือCLASSPATH
ไม่
แท็ก<classpathPrefix>
อนุญาตให้คุณเพิ่มคำนำหน้า (ในตัวอย่าง lib) ก่อนทรัพยากรแต่ละรายการ การระบุคำนำหน้าใน<classpathPrefix>
ทำให้คุณสามารถวางการอ้างอิงในโฟลเดอร์แยกต่างหากได้
ได้ คุณสามารถวางไลบรารีไว้ในไลบรารีอื่นได้ และมีความประหลาดใจมากมายรอคุณอยู่เมื่อคุณต้องการส่งพาธไปยังไฟล์คุณสมบัติซึ่งอยู่ในไลบรารี jar ซึ่งอยู่ในไลบรารี jar
สุดท้าย แท็ก<mainClass>
ชี้ไปที่คลาสปฏิบัติการหลัก “ คลาสปฏิบัติการหลักคืออะไร? ", - คุณถาม. และสิ่งที่สำคัญคือเครื่อง Java สามารถเรียกใช้โปรแกรมที่ระบุได้ไม่เพียง แต่โดยคลาส Java เท่านั้น แต่ยังรวมถึงไฟล์ jar ด้วย และในกรณีนี้จำเป็นต้องมีคลาสเริ่มต้นหลัก
1.4 ปลั๊กอินสร้างหมายเลข buildnumber-maven-plugin
บ่อยครั้ง ไลบรารี่ของ jar และไฟล์ war จะมีข้อมูลชื่อโปรเจ็กต์และเวอร์ชัน รวมถึงเวอร์ชันของแอสเซมบลี วิธีนี้ไม่เพียงแต่มีประโยชน์สำหรับการจัดการการขึ้นต่อกันเท่านั้น แต่ยังทำให้การทดสอบง่ายขึ้นอีกด้วย: เป็นที่ชัดเจนในเวอร์ชันของไลบรารีที่มีการแก้ไขข้อผิดพลาดและเพิ่มข้อผิดพลาดนั้น
บ่อยครั้งที่งานนี้ได้รับการแก้ไขเช่นนี้ - พวกเขาสร้างไฟล์พิเศษapplication.properties
ที่มีข้อมูลที่จำเป็นทั้งหมดและรวมไว้ในชุดประกอบ คุณยังสามารถกำหนดค่าสคริปต์บิลด์เพื่อให้ข้อมูลจากไฟล์นี้ย้ายไปยังMANIFEST.MF
ฯลฯ
แต่สิ่งที่น่าสนใจที่สุดคือ Maven มีปลั๊กอินพิเศษที่สามารถสร้างไฟล์ application.properties ได้ ในการทำเช่นนี้คุณต้องสร้างไฟล์ดังกล่าวและเติมด้วยเทมเพลตข้อมูลพิเศษ ตัวอย่าง:
# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}
ค่าของพารามิเตอร์ทั้งสามจะถูกแทนที่ในขั้นตอนการสร้าง
พารามิเตอร์pom.name
และpom.version
จะนำมาโดยตรงpom.xml
จาก และเพื่อสร้างหมายเลขบิลด์เฉพาะใน Maven มีปลั๊กอินพิเศษbuildnumber-maven-plugin
- ดูตัวอย่างด้านล่าง:
<packaging>war</packaging>
<version>1.0</version>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<revisionOnScmFailure>true</revisionOnScmFailure>
<format>{0}-{1,date,yyyyMMdd}</format>
<items>
<item>${project.version}</item>
<item>timestamp</item>
</items>
</configuration>
</plugin>
</plugins>
ในตัวอย่างข้างต้น มีสามสิ่งที่สำคัญเกิดขึ้น ขั้นแรกให้ระบุปลั๊กอินสำหรับการตั้งค่าเวอร์ชันแอสเซมบลี ประการที่สอง มีการระบุว่าจะทำงานในช่วงตรวจสอบความถูกต้อง (เฟสแรกสุด)และสร้างหมายเลขบิลด์${buildNumber}
-
และประการที่สามจะมีการระบุรูปแบบของหมายเลขแอสเซมบลีนี้ซึ่งติดกาวเข้าด้วยกันจากหลายส่วน . นี่คือเวอร์ชันของโครงการproject.version
และเวลาปัจจุบันที่กำหนดโดยเทมเพลต รูปแบบเทมเพลตระบุโดยคลาสMessageFormat
Java