1.1 Senarai pemalam untuk dibina dalam Maven
Perhimpunan dalam Maven boleh dikonfigurasikan dengan sangat fleksibel. Pembangun Maven telah mencipta berpuluh-puluh pemalam secara khusus, yang dengannya anda boleh mengkonfigurasi pelbagai binaan dengan sangat fleksibel. Yang paling popular daripada mereka ditunjukkan dalam jadual di bawah:
pasangkan | Penerangan | |
---|---|---|
1 | maven-compiler-plugin | Mengurus kompilasi Java |
2 | maven-resources-plugin | Mengawal kemasukan sumber dalam perhimpunan |
3 | pemalam sumber maven | Mengawal sama ada kod sumber disertakan dalam perhimpunan |
4 | maven-dependency-plugin | Mengawal proses menyalin perpustakaan pergantungan |
5 | maven-jar-plugin | Pemalam untuk mencipta fail balang akhir |
6 | plugin perang maven | Plugin untuk mencipta fail perang terakhir |
7 | maven-surefire-plugin | Menguruskan larian ujian |
8 | buildnumber-maven-plugin | Menghasilkan nombor binaan |
Setiap pemalam adalah menarik dengan cara tersendiri, tetapi kami perlu menganalisis semuanya. Mari kita mulakan dengan perkara utama - pemalam pengurusan kompilasi.
1.2 Pemalam kompilasi maven-compiler-plugin
Plugin paling popular yang membolehkan anda mengawal versi pengkompil dan digunakan dalam hampir semua projek ialah maven-compiler-plugin
. Ia mempunyai tetapan lalai, tetapi dalam hampir setiap projek ia perlu ditetapkan semula.
Dalam versi paling mudah, dalam pemalam, anda perlu menentukan versi kod sumber Java dan versi mesin Java di mana pemasangan dijalankan:
<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>
Dalam contoh di atas, kami menetapkan tiga pilihan pengkompil Java: source
, target
dan encoding
.
Parameter source
membolehkan kami menetapkan versi Java untuk sumber kami. Parameter target
ialah versi mesin Java di mana anda ingin menyusun kelas. Jika tiada kod atau versi mesin Java dinyatakan, maka lalai ialah 1.3
Akhir sekali, parameter encoding
membolehkan anda menentukan pengekodan fail Java. Kami menunjukkan UTF-8
. Kini hampir semua sumber disimpan dalam UTF-8
. Tetapi jika parameter ini tidak ditentukan, maka pengekodan semasa sistem pengendalian akan dipilih. Untuk Windows, ini ialah pengekodan Windows-1251
.
Terdapat juga kes apabila komputer binaan mempunyai beberapa versi Java yang dipasang: untuk membina modul yang berbeza dan/atau projek yang berbeza. Dalam kes ini, JAVA_HOME
hanya laluan ke salah satu daripadanya boleh ditentukan dalam pembolehubah.
Di samping itu, terdapat pelbagai pelaksanaan mesin Java: OpenJDK, OracleJDK, Amazon JDK. Dan semakin besar projek itu, semakin kompleks strukturnya. Tetapi anda boleh secara eksplisit menetapkan laluan ke pengkompil javac untuk pemalam menggunakan teg
Pemalam maven-compiler-plugin
mempunyai dua matlamat:
compiler:compile
– penyusunan sumber, secara lalai dikaitkan dengan fasa penyusunancompiler:testCompile
– penyusunan ujian, secara lalai ia dikaitkan dengan fasa penyusunan ujian.
Anda juga boleh menentukan senarai hujah untuk dihantar kepada pengkompil javac pada baris arahan:
<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 Pemalam untuk mencipta fail jar maven-jar-plugin
Jika anda ingin membina perpustakaan balang anda sendiri dengan Maven, anda memerlukan maven-jar-plugin. Plugin ini melakukan banyak perkara yang berguna.
Contoh pemalam sedemikian:
<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>
Pertama, ia boleh digunakan untuk menentukan fail mana yang akan masuk ke perpustakaan dan mana yang tidak. Menggunakan teg <include>
dalam bahagian, <includes>
anda boleh menentukan senarai direktori yang kandungannya perlu ditambahkan pada pustaka .
Kedua, setiap balang mesti mempunyai manifes ( MANIFEST.MF file ). Pemalam itu sendiri akan meletakkannya di tempat yang betul dalam perpustakaan, anda hanya perlu menentukan laluan mana untuk mengambilnya. Tag digunakan untuk ini <manifestFile>
.
Akhir sekali, pemalam boleh menjana manifes sendiri. Untuk melakukan ini, bukannya teg, <manifestFile>
anda perlu menambah teg <manifest>
dan menentukan data untuk manifes masa hadapan di dalamnya. Contoh:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
Teg <addClasspath>
menentukan sama ada untuk menambah manifes CLASSPATH
.
Teg <classpathPrefix>
membolehkan anda menambah awalan (dalam lib contoh) sebelum setiap sumber. Menentukan awalan dalam <classpathPrefix>
membolehkan anda meletakkan kebergantungan dalam folder berasingan.
Ya, anda boleh meletakkan perpustakaan di dalam perpustakaan lain. Dan terdapat banyak kejutan menanti anda apabila anda perlu melepasi laluan ke fail hartanah di suatu tempat, iaitu dalam perpustakaan balang, yang terdapat dalam perpustakaan balang.
Akhirnya, teg <mainClass>
menunjuk ke kelas boleh laku utama. “Apakah kelas boleh laku utama? ", - anda bertanya. Dan masalahnya ialah mesin Java boleh menjalankan program yang ditentukan bukan sahaja oleh kelas Java, tetapi juga oleh fail jar. Dan untuk kes ini kelas permulaan utama diperlukan.
1.4 Bina pemalam penjanaan nombor buildnumber-maven-plugin
Selalunya, perpustakaan jar dan fail perang menyertakan maklumat dengan nama projek dan versinya, serta versi pemasangan. Ini bukan sahaja berguna untuk mengurus kebergantungan, tetapi ia juga memudahkan ujian: adalah jelas dalam versi perpustakaan mana ralat itu diperbaiki dan di mana ia ditambah.
Selalunya, tugas ini diselesaikan seperti ini - mereka membuat fail khas application.properties
yang mengandungi semua maklumat yang diperlukan dan memasukkannya ke dalam perhimpunan. Anda juga boleh mengkonfigurasi skrip binaan supaya data daripada fail ini berhijrah ke MANIFEST.MF
dsb.
Tetapi apa yang paling menarik ialah Maven mempunyai pemalam khas yang boleh menjana fail application.properties sedemikian. Untuk melakukan ini, anda perlu membuat fail sedemikian dan mengisinya dengan templat data khas. Contoh:
# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}
Nilai ketiga-tiga parameter akan digantikan pada peringkat binaan.
Parameter pom.name
dan pom.version
akan diambil terus daripada pom.xml
. Dan untuk menjana nombor binaan unik dalam Maven, terdapat pemalam khas - buildnumber-maven-plugin
. Lihat contoh di bawah:
<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>
Dalam contoh di atas, tiga perkara penting berlaku. Pertama, pemalam itu sendiri ditentukan untuk menetapkan versi pemasangan . Kedua, dinyatakan bahawa ia akan dijalankan semasa fasa pengesahan (fasa pertama) dan menjana nombor binaan - ${buildNumber}
.
Dan ketiga, format nombor pemasangan ini ditunjukkan, yang dilekatkan bersama dari beberapa bahagian . Ini ialah versi projek project.version
dan masa semasa yang diberikan oleh templat. Format templat ditentukan oleh kelas Java MessageFormat
.
GO TO FULL VERSION