2.1 plugin sumber daya salinan maven-resources-plugin
Jika Anda membuat aplikasi web, Anda hanya akan memiliki banyak sumber daya berbeda di dalamnya. Ini adalah pustaka jar, servlet jsp, file pengaturan. Dan tentu saja, ini adalah sekumpulan file statis seperti html
, css
, js
, serta berbagai gambar.
Secara default, saat membangun proyek, Maven hanya akan menyalin semua file Anda dari folder src/main/resources
ke direktori target. Jika Anda ingin mengubah perilaku ini, plugin akan membantu Anda maven-resources-plugin
.
Contoh kode untuk plugin semacam itu:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${basedir}/target/resources
</outputDirectory>
<resources>
<resource> instructions for copying a resource 1 </resource>
<resource> instructions for copying a resource 2 </resource>
<resource> instructions for copying a resource N </resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Plugin ini akan dipanggil selama fase validasi. Dengan menggunakan tag, <outputDirectory>
Anda dapat menyetel direktori tempat plugin harus menyalin sumber daya yang ditentukan dalam file <resources>
. Dan di sinilah plugin dapat berkembang dengan sekuat tenaga.
2.2 Memfilter sumber daya dengan plugin maven-resources
Sumber daya plugin dapat ditentukan tidak hanya dalam bentuk file, tetapi juga dalam bentuk direktori. Selain itu, topeng dapat ditambahkan ke direktori, yang menentukan file mana darinya yang akan disertakan dalam sumber daya ini.
Contoh:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Dua tanda bintang sebagai topeng mewakili sejumlah direktori . Pada contoh di atas, semua file png yang terdapat dalam direktori src/main/resources/images
(dan subdirektorinya) akan diambil sebagai data sumber daya.
Jika Anda ingin mengecualikan beberapa file, Anda dapat menggunakan exclude
. Contoh:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
Tag diterapkan secara berurutan: pertama, file sertakan yang ditentukan dalam file sertakan akan ditambahkan ke sumber daya, dan kemudian file yang dikecualikan akan dikecualikan dari daftar ini.
Tapi itu belum semuanya. Plugin dapat melihat ke dalam file (jika itu adalah teks, tentu saja). Dan, misalnya, tambahkan application.properties
versi rakitan yang diperlukan ke file. Agar plugin memproses konten file, Anda perlu menentukan parameternya <filtering>true</filtering>
.
Contoh:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
Detail lebih lanjut tentang plugin ini dapat ditemukan di tautan: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 plugin inklusi sumber maven-source-plugin
Plugin lain yang bermanfaat - maven-source-plugin
memungkinkan Anda memasukkan kode sumber file java Anda ke dalam rakitan. Untuk apa?
Masalahnya adalah selain aplikasi web, sejumlah besar perpustakaan dirakit menggunakan Maven. Banyak proyek Java mengikuti konsep open-source dan didistribusikan ke komunitas Java dengan sumbernya sendiri.
Mengapa Anda memerlukan plugin terpisah? Mengapa Anda tidak bisa menyalin sumbernya saja dan hanya itu?
Pertama, dalam proyek kompleks apa pun, sumber dapat disimpan di beberapa tempat.
Kedua, pembuatan sumber berdasarkan spesifikasi xml sering digunakan, sumber seperti itu juga perlu disertakan dalam rakitan.
Dan ketiga, Anda dapat memutuskan untuk tidak menyertakan file rahasia apa pun di rakitan Anda.
Contoh penggunaan plugin maven-source-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
2.4 plugin penyalin ketergantungan maven-ketergantungan-plugin
Anda mungkin juga perlu menyalin dependensi (perpustakaan) dengan cerdas saat membuat proyek. Plugin digunakan untuk ini maven-dependency-plugin
.
Contoh:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
Dalam contoh ini, perilaku default plugin ditulis - menyalin pustaka ke file ${project.build.directory}/lib
.
Bagian eksekusi menyatakan bahwa plugin akan dipanggil selama fase build - package, goal - copy-dependences.
Secara umum, plugin ini memiliki tujuan yang cukup besar, berikut adalah yang paling populer:
1 | ketergantungan: menganalisis | analisis ketergantungan (digunakan, tidak digunakan, ditentukan, tidak ditentukan) |
2 | ketergantungan: analisis-duplikat | mengidentifikasi ketergantungan duplikat |
3 | ketergantungan: menyelesaikan | resolusi (definisi) dari semua dependensi |
4 | dependensi:resolve-plugin | izin (definisi) dari semua plugin |
5 | ketergantungan: pohon | menampilkan pohon ketergantungan |
Anda juga dapat mengatur parameter tambahan di bagian konfigurasi:
1 | Direktori keluaran | Direktori tempat dependensi akan disalin |
2 | overWriteReleases | Tandai untuk menimpa dependensi saat membuat rilis |
3 | overWriteSnapshots | Tandai untuk menimpa dependensi non-terminal yang memiliki SNAPSHOT |
4 | overWriteIfNewer | Tandai untuk menimpa perpustakaan dengan versi yang lebih baru |
Contoh:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
Secara default <overWriteReleases>
, dan <overWriteSnapshots>
salah, karena <overWriteIfNewer>
benar.
GO TO FULL VERSION