Plugin Maven Enforcer

1. Ikhtisar

Dalam tutorial ini, kita akan belajar tentang Maven Enforcer Plugin dan bagaimana kita dapat menggunakannya untuk menjamin tingkat kepatuhan dalam proyek kita.

Plugin ini sangat berguna ketika kami telah mendistribusikan tim, yang tersebar di seluruh dunia.

2. Ketergantungan

Untuk menggunakan plugin dalam proyek kita, kita perlu menambahkan ketergantungan berikut ke pom.xml kita :

 org.apache.maven.plugins maven-enforcer-plugin 3.0.0-M2 

Versi terbaru plugin tersedia di Maven Central.

3. Konfigurasi dan Tujuan Plugin

Maven Enforcer memiliki dua tujuan: penegak: penegakan dan penegakan: tampilan-info.

Sasaran penegakan dijalankan selama build proyek untuk menjalankan aturan yang ditentukan dalam konfigurasi, sedangkan sasaran info-tampilan menunjukkan informasi terkini tentang aturan bawaan yang ada di pom.xml proyek .

Mari kita tentukan tujuan penegakan di tag eksekusi . Selanjutnya, kami akan menambahkan tag konfigurasi yang menyimpan definisi aturan untuk proyek:

...   enforce  enforce         ...

4. Aturan Penegak Maven

Kata kunci menegakkan memberikan saran halus tentang keberadaan aturan yang harus dipatuhi. Beginilah cara kerja plugin Maven Enforcer. Kami mengonfigurasinya dengan beberapa aturan yang akan diterapkan selama fase build proyek.

Di bagian ini, kita akan melihat aturan yang tersedia yang dapat kita terapkan pada proyek kita untuk meningkatkan kualitasnya.

4.1. Blokir Ketergantungan Ganda

Dalam proyek multi-modul, di mana hubungan induk-anak ada di antara POM , memastikan tidak ada duplikasi ketergantungan dalam POM akhir yang efektif untuk suatu proyek bisa menjadi tugas yang rumit. Namun, dengan aturan banDuplicatePomDependencyVersions , kami dapat dengan mudah memastikan bahwa proyek kami bebas dari kesalahan tersebut.

Yang perlu kita lakukan adalah menambahkan tag banDuplicatePomDependencyVersions ke bagian aturan konfigurasi plugin:

...    ...

Untuk memeriksa perilaku aturan, kita bisa menduplikasi satu ketergantungan di pom.xml dan menjalankan kompilasi mvn clean. Ini akan menghasilkan baris kesalahan berikut di konsol:

... [WARNING] Rule 0: org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions failed with message: Found 1 duplicate dependency declaration in this project: - dependencies.dependency[io.vavr:vavr:jar] ( 2 times ) [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.370 s [INFO] Finished at: 2019-02-19T10:17:57+01:00 ...

4.2. Membutuhkan Versi Maven dan Java

Aturan requireMavenVersion dan requireJavaVersion mengaktifkan penguncian di seluruh project dari versi Maven dan Java yang diperlukan. Ini akan membantu menghilangkan perbedaan yang mungkin timbul dari penggunaan versi Maven dan JDK yang berbeda di lingkungan pengembangan.

Mari perbarui bagian aturan dari konfigurasi plugin:

 3.0   1.8 

Ini memungkinkan kami untuk menentukan nomor versi dengan cara yang fleksibel, selama sesuai dengan pola spesifikasi rentang versi plugin.

Selain itu, kedua aturan juga menerima parameter pesan untuk menentukan pesan khusus:

...  3.0 Invalid Maven version. It should, at least, be 3.0  ...

4.3. Membutuhkan Variabel Lingkungan

Dengan aturan requireEnvironmentVariable , kami dapat memastikan bahwa variabel lingkungan tertentu disetel di lingkungan eksekusi.

Ini dapat diulang untuk mengakomodasi lebih dari satu variabel yang dibutuhkan:

 ui   cook 

4.4. Membutuhkan Profil Aktif

Profil di Maven membantu kita mengonfigurasi properti yang akan aktif ketika aplikasi kita diterapkan ke lingkungan yang berbeda.

Akibatnya, kita bisa menggunakan aturan requireActiveProfile ketika kita perlu memastikan bahwa satu atau beberapa profil yang ditentukan aktif, sehingga menjamin keberhasilan eksekusi aplikasi kita:

 local,base Missing active profiles 

Dalam potongan di atas, kami menggunakan properti message untuk menyediakan pesan khusus untuk ditampilkan jika pemeriksaan aturan gagal.

4.5. Aturan Lainnya

Plugin Maven Enforcer memiliki banyak aturan lain untuk meningkatkan kualitas dan konsistensi proyek terlepas dari lingkungan pengembangan.

Selain itu, plugin memiliki perintah untuk menampilkan info tentang beberapa aturan yang saat ini dikonfigurasi:

mvn enforcer:display-info

5. Aturan Kustom

Sejauh ini, kami telah mempelajari aturan plugin bawaan. Sekarang, saatnya untuk membuat aturan kustom kita sendiri.

Pertama, kita perlu membuat proyek Java baru yang akan berisi aturan khusus kita. Aturan adat adalah kelas Object yang mengimplementasikan yang EnforceRule antarmuka dan menimpa para mengeksekusi () metode :

public void execute(EnforcerRuleHelper enforcerRuleHelper) throws EnforcerRuleException { try { String groupId = (String) enforcerRuleHelper.evaluate("${project.groupId}"); if (groupId == null || !groupId.startsWith("org.baeldung")) { throw new EnforcerRuleException("Project group id does not start with org.baeldung"); } } catch (ExpressionEvaluationException ex) { throw new EnforcerRuleException( "Unable to lookup an expression " + ex.getLocalizedMessage(), ex ); } }

Our custom rule simply checks if the target project's groupId starts with org.baeldung or not.

Notice how we don't have to return boolean or anything as such to indicate the rule is not satisfied. We just throw an EnforcerRuleException with a description of what is wrong.

We can use our custom rule by adding it as a dependency to the Maven Enforcer plugin:

...    ...

Please note that if the custom rule project is not a published artifact on Maven Central, we can install it into the local Maven repo by running the mvn clean install.

This will make it available when compiling the target project that has the Maven Enforcer Plugin. Please see the plugin's documentation for the custom rule to learn more.

Untuk melihatnya beraksi, kita dapat menyetel properti groupId dari proyek dengan Enforcer Plugin untuk apa pun selain "org.baeldung" dan menjalankan kompilasi mvn clean .

6. Kesimpulan

Dalam tutorial singkat ini, kami melihat bagaimana Maven Enforcer Plugin dapat menjadi tambahan yang berguna untuk plugin kami yang sudah ada. Kemampuan untuk menulis aturan kustom meningkatkan jangkauan aplikasinya.

Harap dicatat bahwa kita perlu menghapus tanda komentar pada dependensi dan aturan untuk contoh custom-rule dalam contoh kode sumber lengkap yang tersedia di GitHub.