Projek Pelbagai Modul dengan Maven

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara membina projek multi-modul dengan Maven.

Pertama, kita akan membincangkan apa itu projek multi-modul dan melihat faedah mengikuti pendekatan ini. Kemudian kami akan menyediakan projek sampel kami. Untuk pengenalan yang baik untuk Maven, lihat tutorial ini.

2. Projek Pelbagai Modul Maven

Projek multi-modul dibina dari agregat POM yang menguruskan sekumpulan submodul. Dalam kebanyakan kes, agregator terletak di direktori root projek dan mesti mempunyai kemasan jenis pom .

Sekarang, submodul adalah projek Maven biasa, dan ia dapat dibina secara berasingan atau melalui POM agregator.

Dengan membina projek melalui agregat POM, setiap projek yang mempunyai jenis pembungkusan yang berbeza daripada pom akan menghasilkan fail arkib yang dibina.

3. Faedah Menggunakan Multi-Modul

Kelebihan ketara menggunakan pendekatan ini ialah kita dapat mengurangkan pendua.

Katakan kita mempunyai aplikasi yang terdiri daripada beberapa modul, biarlah itu modul depan dan modul belakang. Sekarang, kami mengusahakan kedua-duanya dan mengubah fungsi yang mempengaruhi kedua-duanya. Dalam kes itu, tanpa alat binaan khusus, kita harus membina kedua-dua komponen secara berasingan atau menulis skrip yang akan menyusun kod, menjalankan ujian dan menunjukkan hasilnya. Kemudian, setelah kita mendapat lebih banyak modul dalam projek, ia akan menjadi lebih sukar untuk dikendalikan dan dikekalkan.

Selain itu, di dunia nyata, projek mungkin memerlukan plugin Maven tertentu untuk melakukan pelbagai operasi semasa kitaran hidup, berkongsi pergantungan dan profil atau memasukkan projek BOM yang lain.

Oleh itu, semasa memanfaatkan pelbagai modul, kita dapat membina modul aplikasi kita dalam satu perintah dan jika pesanan itu penting, Maven akan memikirkannya untuk kita. Kita juga boleh berkongsi banyak konfigurasi dengan modul lain .

4. POM ibu bapa

Maven menyokong pewarisan dengan cara setiap fail pom.xml mempunyai POM induk tersirat, ia dipanggil Super POM dan boleh terletak di binari Maven. Kedua-dua fail ini digabungkan oleh Maven dan membentuk POM Berkesan.

Oleh itu, kita boleh membuat fail pom.xml kita sendiri yang akan berfungsi sebagai projek induk . Kemudian, kita boleh memasukkan semua konfigurasi dengan pergantungan dan menetapkannya sebagai induk modul anak kita, jadi mereka akan mewarisi daripadanya.

Selain harta pusaka, Maven memberikan pengertian mengenai agregasi. POM ibu bapa yang memanfaatkan fungsi ini dipanggil POM agregat . Pada dasarnya, POM jenis ini menyatakan modulnya secara eksplisit dalam fail pom.xmlnya.

5. Submodul

Submodul atau subproyek adalah projek Maven biasa yang diwarisi dari POM induk. Seperti yang telah kita ketahui, warisan membolehkan kita berkongsi konfigurasi dan kebergantungan dengan submodul. Walau bagaimanapun, jika kami ingin membuat atau melepaskan projek kami dalam satu masa, kami harus menyatakan submodul kami secara eksplisit dalam POM induk. Pada akhirnya, POM induk kami akan menjadi ibu bapa dan juga POM agregat.

6. Membina Aplikasi

Sekarang setelah kita memahami submodul dan hierarki Maven, mari kita bina contoh aplikasi untuk menunjukkannya. Kami akan menggunakan antara muka baris perintah Maven untuk menghasilkan projek kami.

Aplikasi ini akan terdiri daripada tiga modul, yang akan mewakili:

  • Bahagian teras domain kami
  • A web perkhidmatan menyediakan beberapa API REST
  • A webapp mengandungi aset web pengguna menghadap sejenis

Oleh kerana kita akan memberi tumpuan kepada Maven, pelaksanaan perkhidmatan ini akan tetap tidak dapat ditentukan.

6.1. Menjana POM Ibu Bapa

Pertama, mari buat projek induk :

mvn archetype:generate -DgroupId=org.baeldung -DartifactId=parent-project

Setelah ibu bapa dihasilkan, kita harus membuka fail pom.xml yang terdapat di direktori induk dan menukar pembungkusan menjadi pom.

pom

Dengan menetapkan pembungkusan ke jenis pom, kami menyatakan bahawa projek akan berfungsi sebagai ibu bapa atau agregator - ia tidak akan menghasilkan artifak lebih lanjut.

Sekarang, apabila agregator kami selesai, kami dapat menghasilkan submodul kami.

Namun, kita perlu perhatikan, ini adalah tempat di mana semua konfigurasi yang akan dikongsi berada dan akhirnya digunakan kembali dalam modul anak. Antara lain, kita boleh menggunakan dependencyManagement atau pluginManagement di sini.

6.2. Membuat Submodul

Oleh kerana POM induk kami dinamakan projek induk , kami perlu memastikan kami berada di direktori induk dan menjalankan arahan menghasilkan :

cd parent-project mvn archetype:generate -DgroupId=org.baeldung -DartifactId=core mvn archetype:generate -DgroupId=org.baeldung -DartifactId=service mvn archetype:generate -DgroupId=org.baeldung -DartifactId=webapp

Perhatikan arahan yang digunakan. Sama seperti yang kita gunakan untuk ibu bapa. Perkara di sini adalah, modul ini adalah projek Maven biasa, namun Maven menyedari bahawa mereka bersarang. Apabila kami menukar direktori ke projek induk , didapati ibu bapa mempunyai pembungkusan jenis pom dan mengubah suai kedua-dua fail pom.xml dengan sewajarnya.

Selepas itu, Maven akan menghasilkan tiga submodul dan mengubahsuai kami fail pom.xml ibu bapa dengan menambahkan beberapa tag:

 core service webapp 

Sekarang, ibu bapa kita secara eksplisit menyatakan modul gabungan.

Seterusnya, ketika menjalankan perintah paket mvn di direktori projek induk, Maven akan membina dan menguji ketiga-tiga modul.

Lebih-lebih lagi, Maven Reactor akan menganalisis projek kami dan membinanya mengikut urutan yang betul. Jadi, jika kami webapp modul bergantung kepada perkhidmatan yang modul, Maven akan membina pertama perkhidmatan , maka webapp .

Bagaimanapun, jika kita ingin berkongsi semua konfigurasi dengan submodul kami, dalam fail pom.xml mereka , kita harus menyatakan induknya:

 org.baeldung parent-project 1.0-SNAPSHOT 

Perlu kita perhatikan, bahawa submodul hanya boleh mempunyai satu ibu bapa. Walau bagaimanapun, kita boleh mengimport banyak BOM. Maklumat lebih lanjut mengenai fail BOM boleh didapati dalam artikel ini.

6.3. Membina Projek

Sekarang kita dapat membina ketiga-tiga modul sekaligus. Di direktori projek ibu bapa, jalankan:

mvn package

Ini akan membina semua modul, kita harus melihat output arahan berikut:

[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] parent-project [INFO] core [INFO] service [INFO] webapp ... [INFO] Reactor Summary: [INFO] parent-project ..................................... SUCCESS [ 0.140 s] [INFO] core ............................................... SUCCESS [ 2.195 s] [INFO] service ............................................ SUCCESS [ 0.767 s] [INFO] webapp ............................................. SUCCESS [ 0.572 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------

Reactor menyenaraikan projek induk , tetapi kerana jenis pom ia dikecualikan dan hasilnya menghasilkan tiga fail .jar yang berasingan untuk semua modul lain. Dalam kes tersebut, binaan berlaku pada tiga daripadanya.

7. Kesimpulannya

Dalam tutorial ini, kami membincangkan faedah menggunakan pelbagai modul Maven. Juga, kami membezakan antara POM induk Maven biasa dan POM agregat. Pada akhirnya, kami menunjukkan cara menyiapkan multi-modul mudah untuk dimainkan.

Maven adalah alat yang hebat tetapi ia sendiri rumit. Sekiranya anda ingin mencari lebih banyak maklumat mengenai Maven, lihat rujukan Sonatype Maven atau panduan Apache Maven. Sekiranya anda mencari penggunaan lanjutan dari multi-modul Maven, lihat bagaimana projek Spring Boot memanfaatkan penggunaannya.

Semua contoh kod di Baeldung dibina menggunakan Maven, jadi anda boleh dengan mudah memeriksa laman web projek GitHub kami untuk melihat pelbagai konfigurasi Maven.