Kami memiliki proyek Maven 2 dengan banyak modul di dalamnya. Contoh:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Misalkan pembuatan modul "data" memakan waktu dan kami ingin mengecualikannya saat proyek dibuat oleh server CI. Saat ini kami menggunakan dua file pom.xml untuk mencapai ini. Satu memiliki semua modul di dalamnya dan yang lainnya memiliki semua modul kecuali yang dapat ditinggalkan untuk CI. Namun hal tersebut cukup mengganggu karena terkadang kita lupa memasukkan modul baru ke kedua file tersebut.
Apakah ada solusi yang tidak memerlukan dua daftar modul terpisah?
Dengan Maven 3.2.1, Anda sekarang dapat menggunakan
-pl !<module_name>,!<module_name>
untuk mengecualikan modul tertentu dari build reaktor.Lihat permintaan fitur ini: https://issues.apache.org/jira/browse/MNG-5230
sumber
-
sebagai gantinya!
, yaitu-pl -<module_name>
Proyek yang akan dibangun juga dapat ditentukan di baris perintah mvn. Ini akan menghilangkan kebutuhan akan pom terpisah, tetapi sebaliknya Anda harus mengubah konfigurasi CI setiap kali ada modul baru.
Mungkin kombinasi dari bendera ini dan
--also-make-dependents
atau--also-make
akan mengurangi beban pemeliharaan ini lagi.sumber
mvn clean install -pl mysubproject
Saya berasumsi Anda ingin build default selalu membangun semuanya, berapa pun kecepatannya, sehingga developer baru dapat memulai dengan cepat tanpa harus banyak memahami tentang POM. Anda dapat menggunakan profil seperti ini:
Masalahnya adalah jika pengembang menentukan profil lain pada baris perintah, maka profil
expensive-modules-to-build
tersebut tidak disertakan (kecuali pengembang juga menentukannya). Ini membuatnya rumit untuk mengingat profil mana yang perlu disertakan.Berikut adalah cara hacky untuk itu. Kedua profil selalu disertakan, karena file pom.xml selalu ada. Jadi untuk mengecualikan modul mahal, Anda dapat menggunakan
-P!full-build
baris perintah.sumber
-pl !<module_name>,!<module_name>
lebih baik daripada yang lama iniIde lain: Modul reaktor dapat disarangkan, jadi seharusnya mungkin untuk mengelompokkan modul cepat dan lambat Anda ke dalam pom terpisah dan kemudian menambahkan pom agregator lain yang berisi keduanya sebagai modul. CI Server Anda kemudian hanya dapat mereferensikan pom yang berisi modul pembangunan cepat.
sumber
Anda bisa menggunakan profil maven . Di lingkungan build kami, kami membuat profil
quick
yang menonaktifkan banyak plugin dan eksekusi uji.Ini dilakukan oleh
Dan kemudian kita memanggil maven dengan cara berikut
Anda mungkin dapat menonaktifkan kompilasi dan plugin standar lainnya di pom modul Anda untuk mempercepatnya.
sumber
Bukan jawaban yang diminta orang-orang ini. Situasi saya adalah saya hanya ingin menerapkan pom induk. Saya menggunakan
spring-boot-thin-layout
modul dalam anak. Ini membutuhkan modul induk untuk diterapkan ke artifactory. Saya menambahkan yang berikut ini ke dalam proyek saya. Ini memungkinkan melewatkaninstall
dan / ataudeploy
fase.Di pom orang tua saya:
Dan di pom anak saya atau modul apa pun yang tidak ingin Anda gunakan dengan orang tua:
Jadi secara efektif ketika saya berjalan
mvn deploy
di pom induk, itu akan mengkompilasi semua modul, tidak menjalankan instalasi pada apa pun, dan kemudian pada akhirnya menerapkan modul apa pun yang tidak ada<maven.deploy.skip>${disable.deploy}</maven.deploy.skip>
di propertinya. Jadi dalam kasus saya hanya menerapkan orang tua.sumber