Plugin Maven Enforcer

1. Gambaran keseluruhan

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

Plugin ini sangat berguna apabila kami mempunyai pasukan yang diedarkan, tersebar di seluruh dunia.

2. Kebergantungan

Untuk menggunakan plugin dalam projek kami, kami perlu menambahkan kebergantungan berikut ke pom.xml kami :

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

Versi terbaru plugin boleh didapati di Maven Central.

3. Konfigurasi dan Matlamat Plugin

Maven Enforcer mempunyai dua tujuan: penguatkuasa: penegak dan penguatkuasa: paparan-maklumat.

Yang menguatkuasakan larian matlamat semasa membina projek untuk melaksanakan kaedah-kaedah yang dinyatakan dalam konfigurasi, manakala paparan-info rancangan matlamat maklumat semasa mengenai terbina dalam kaedah-kaedah yang terdapat di dalam projek itu pom.xml .

Mari tentukan matlamat penguatkuasaan dalam teg pelaksanaan . Selanjutnya, kami akan menambahkan tag konfigurasi yang memegang definisi peraturan untuk projek:

...   enforce  enforce         ...

4. Peraturan Maven Enforcer

Kata kunci menegakkan memberikan cadangan halus tentang adanya peraturan yang harus dipatuhi. Ini adalah cara kerja plugin Maven Enforcer. Kami mengkonfigurasinya dengan beberapa peraturan yang akan diberlakukan selama fasa pembinaan projek.

Di bahagian ini, kita akan melihat peraturan yang ada yang dapat kita terapkan pada projek kita untuk meningkatkan kualitinya.

4.1. Ban Ketergantungan Pendua

Dalam projek multi-modul, di mana hubungan ibu bapa-anak wujud di antara POM , memastikan tidak ada pendua pergantungan dalam POM akhir yang berkesan untuk projek boleh menjadi tugas yang sukar. Tetapi, dengan peraturan banDuplicatePomDependencyVersions , kita dapat dengan mudah memastikan bahawa projek kita bebas dari gangguan seperti itu.

Yang perlu kita buat hanyalah menambahkan tag banDuplicatePomDependencyVersions ke bahagian peraturan konfigurasi pemalam:

...    ...

Untuk memeriksa tingkah laku peraturan, kita dapat menggandakan satu kebergantungan dalam pom.xml dan menjalankan kompilasi bersih mvn. Ini akan menghasilkan garis ralat berikut pada 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. Memerlukan Versi Maven dan Java

Peraturan memerlukanMavenVersion dan memerlukanJavaVersion membolehkan masing-masing penguncian versi versi Maven dan Java yang diperlukan. Ini akan membantu menghilangkan perbezaan yang mungkin timbul dari penggunaan versi Maven dan JDK yang berbeza dalam persekitaran pembangunan.

Mari kemas kini bahagian peraturan konfigurasi pemalam:

 3.0   1.8 

Ini membolehkan kita menentukan nombor versi secara fleksibel, asalkan sesuai dengan corak spesifikasi rangkaian versi plugin.

Selanjutnya, kedua peraturan ini juga menerima parameter pesan untuk menentukan pesan khusus:

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

4.3. Memerlukan Pembolehubah Persekitaran

Dengan requireEnvironmentVariable peraturan, kita boleh memastikan bahawa pembolehubah persekitaran tertentu ditetapkan dalam persekitaran pelaksanaan.

Ia boleh diulang untuk menampung lebih dari satu pemboleh ubah yang diperlukan:

 ui   cook 

4.4. Memerlukan Profil Aktif

Profil di Maven membantu kami mengkonfigurasi sifat yang akan aktif ketika aplikasi kami disebarkan ke lingkungan yang berbeza.

Oleh itu, kita boleh menggunakan requireActiveProfile peraturan apabila kita perlu untuk memastikan bahawa satu atau profil lebih dinyatakan aktif, sekali gus menjamin kejayaan pelaksanaan permohonan kami:

 local,base Missing active profiles 

Dalam coretan di atas, kami menggunakan harta pesanan untuk memberikan pesanan khusus untuk menunjukkan jika pemeriksaan peraturan gagal.

4.5. Peraturan lain

Plugin Maven Enforcer mempunyai banyak peraturan lain untuk mempromosikan kualiti dan konsistensi projek tanpa mengira persekitaran pembangunan.

Juga, plugin mempunyai perintah untuk memaparkan maklumat mengenai beberapa peraturan yang sedang dikonfigurasi:

mvn enforcer:display-info

5. Peraturan Adat

Setakat ini, kami telah meneroka peraturan pemalam yang terbina dalam. Sekarang, inilah masanya untuk melihat pembuatan peraturan tersuai kita sendiri.

Pertama, kita perlu membuat projek Java baru yang akan mengandungi peraturan khusus kita. Aturan khusus adalah Objek kelas yang menerapkan antara muka EnforceRule dan mengesampingkan kaedah eksekusi () :

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 dalam tindakan, kita dapat menetapkan harta groupId projek dengan Enforcer Plugin kepada apa-apa selain "org.baeldung" dan menjalankan mvn clean compile .

6. Kesimpulannya

Dalam tutorial ringkas ini, kami melihat bagaimana Maven Enforcer Plugin dapat menjadi tambahan yang berguna untuk pemalam yang ada. Keupayaan untuk menulis peraturan khusus meningkatkan pelbagai aplikasinya.

Harap perhatikan bahawa kita perlu melepaskan pergantungan dan aturan untuk contoh aturan khusus dalam kod sumber contoh lengkap yang tersedia di GitHub.