Kami memiliki kebutuhan untuk dapat melewatkan submodule di lingkungan tertentu.
Modul yang dimaksud berisi tes integrasi dan membutuhkan waktu setengah jam untuk beroperasi. Jadi kami ingin memasukkannya ketika membangun di server CI, tetapi ketika pengembang membangun secara lokal (dan tes dijalankan), kami ingin melewati modul itu.
Apakah ada cara untuk melakukan ini dengan pengaturan profil? Saya telah melakukan beberapa googling dan melihat pertanyaan / jawaban lain di sini dan belum menemukan solusi yang baik.
Saya kira satu pilihan adalah menghapus submodule itu dari induk pom.xml
sepenuhnya, dan hanya menambahkan proyek lain di server CI kami untuk hanya membangun modul itu.
Saran?
maven
continuous-integration
jenkins
denishaskin
sumber
sumber
Jawaban:
Tentu, ini bisa dilakukan menggunakan profil. Anda dapat melakukan sesuatu seperti yang berikut ini di pom.xml induk Anda.
Di CI Anda, Anda akan menjalankan pakar dengan
ci
profil, yaitumvn -P ci clean install
sumber
activeByDefault
ke profil itu, dan kemudian harus menambahkan profil kosong lainnya (misalnyaskip-integration-tests
) untuk dapat melewati mereka.Maven versi 3.2.1 menambahkan fitur ini, Anda dapat menggunakan
-pl
sakelar ( pintasan untuk--projects
daftar) dengan!
atau-
( sumber ) untuk mengecualikan submodul tertentu.Hati-hati dalam bash karakter! adalah karakter khusus, jadi Anda harus mengutipnya sendiri (seperti yang saya lakukan) atau menghindarinya dengan karakter backslash.
Sintaks untuk mengecualikan beberapa modul sama dengan inklusi
EDIT Windows tampaknya tidak menyukai tanda kutip tunggal, tetapi perlu dalam bash; di Windows, gunakan tanda kutip ganda (terima kasih @awilkinson)
sumber
mvn -pl !com.acme:nestedmodule1
mvn -pl '!path/to/submodule/directory'
, tanpa menggunakan groupId dan artifactId. Jawaban saya berfungsi jikasubmodule1
dansubmodule2
terletak di direktori saat ini.-pl
dalammvn install
, Anda akan cenderung perlu menggunakannya untukmvn deploy
jugaDimungkinkan untuk memutuskan proyek reaktor mana yang akan dibangun dengan menentukan
-pl
argumen baris perintah:Ia menerima daftar parameter yang dipisahkan koma di salah satu bentuk berikut:
[groupId]:artifactId
Dengan demikian, diberikan struktur sebagai berikut:
Anda dapat menentukan baris perintah berikut:
untuk membangun segalanya. Hapus elemen dalam daftar untuk membangun hanya modul yang Anda inginkan.
EDIT: seperti yang ditunjukkan blackbuild , pada Maven 3.2.1 Anda memiliki bendera baru
-el
yang mengecualikan proyek dari reaktor, serupa dengan apa yang-pl
dilakukan:sumber
mvn install -pl .
untuk menginstal pom induk hanya di repo lokal tanpa membangun modul.Gagasan proyek multi-modul ada untuk melayani kebutuhan segmen proyek yang bergantung pada satu hal. Klien seperti itu tergantung pada layanan yang pada gilirannya tergantung pada EJBs atau rutinitas akses data. Anda dapat mengelompokkan tes integrasi berkelanjutan (CI) Anda dengan cara ini. Saya akan merasionalisasi dengan mengatakan bahwa tes CI harus terkunci dengan perubahan logika aplikasi.
Misalkan proyek Anda disusun sebagai:
Itu
project-root/pom.xml
mendefinisikan modulItu
ci/pom.xml
mendefinisikan profil seperti:Ini akan menghasilkan Maven melewatkan tes dalam modul ini kecuali ketika profil bernama
CI
aktif. Server CI Anda harus diinstruksikan untuk mengeksekusimvn clean package -P CI
. Situs web Maven memiliki penjelasan mendalam tentang mekanisme pembuatan profil .sumber
sekarang ada (dari versi 1.1.1) bendera 'lewati' di pit.
Jadi Anda dapat melakukan hal-hal seperti:
dalam modul Anda, dan lubang akan melewati
[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Melewati proyek
sumber