Proyek Multi-Modul dengan Maven

1. Ikhtisar

Dalam tutorial ini, kami akan menunjukkan cara membuat proyek multi-modul dengan Maven.

Pertama, kita akan membahas apa itu proyek multi-modul dan melihat manfaat mengikuti pendekatan ini. Kemudian kami akan menyiapkan proyek sampel kami. Untuk pengenalan yang baik tentang Maven, lihat tutorial ini.

2. Proyek Multi-Modul Maven

Proyek multi-modul dibangun dari POM aggregator yang mengelola sekelompok submodul. Dalam kebanyakan kasus, agregator terletak di direktori akar proyek dan harus memiliki pengemasan tipe pom .

Sekarang, submodul adalah proyek Maven biasa, dan dapat dibuat secara terpisah atau melalui POM aggregator.

Dengan membangun proyek melalui aggregator POM, setiap proyek yang memiliki tipe pengemasan berbeda dari pom akan menghasilkan file arsip yang dibangun.

3. Manfaat Menggunakan Multi-Modul

Keuntungan signifikan menggunakan pendekatan ini adalah kami dapat mengurangi duplikasi.

Katakanlah kita memiliki aplikasi yang terdiri dari beberapa modul, misalkan modul front-end dan modul back-end. Sekarang, kami mengerjakan keduanya dan mengubah fungsionalitas yang memengaruhi keduanya. Dalam hal ini, tanpa alat build khusus, kita harus membuat kedua komponen secara terpisah atau menulis skrip yang akan mengompilasi kode, menjalankan pengujian, dan menampilkan hasilnya. Kemudian, setelah kami mendapatkan lebih banyak modul dalam proyek, akan menjadi lebih sulit untuk dikelola dan dipelihara.

Selain itu, di dunia nyata, project mungkin memerlukan plugin Maven tertentu untuk melakukan berbagai operasi selama siklus proses build, berbagi dependensi dan profil, atau menyertakan project BOM lainnya.

Oleh karena itu, ketika memanfaatkan multi-modul, kita dapat membangun modul aplikasi kita dalam satu perintah dan jika urutannya penting, Maven akan memikirkannya untuk kita. Selain itu, kami dapat berbagi sejumlah besar konfigurasi dengan modul lain .

4. Badan POM Induk

Maven mendukung pewarisan sedemikian rupa sehingga setiap file pom.xml memiliki POM induk implisit, ini disebut Super POM dan dapat ditempatkan di binari Maven. Kedua file ini digabungkan oleh Maven dan membentuk POM Efektif.

Karenanya, kita dapat membuat file pom.xml kita sendiri yang akan berfungsi sebagai proyek induk . Kemudian, kita dapat menyertakan di sana semua konfigurasi dengan dependensi dan menetapkan ini sebagai induk dari modul anak kita, sehingga mereka akan mewarisinya.

Selain warisan, Maven memberikan pengertian tentang agregasi. POM Induk yang memanfaatkan fungsi ini disebut POM agregat . Pada dasarnya, POM semacam ini mendeklarasikan modulnya secara eksplisit dalam file pom.xml-nya.

5. Submodul

Submodul atau subproyek adalah proyek Maven biasa yang diwarisi dari POM induk. Seperti yang sudah kita ketahui, pewarisan memungkinkan kita berbagi konfigurasi dan dependensi dengan submodul. Namun, jika kami ingin membangun atau merilis proyek kami dalam satu kesempatan, kami harus mendeklarasikan submodul kami secara eksplisit di POM induk. Pada akhirnya, POM induk kami akan menjadi POM induk sekaligus POM agregat.

6. Membangun Aplikasi

Sekarang setelah kita memahami submodul dan hierarki Maven, mari buat aplikasi contoh untuk mendemonstrasikannya. Kami akan menggunakan antarmuka baris perintah Maven untuk menghasilkan proyek kami.

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

  • Bagian inti dari domain kami
  • Sebuah web layanan yang menyediakan beberapa API SISA
  • Sebuah webapp yang berisi menghadap pengguna aset web dari beberapa macam

Karena kami akan fokus pada Maven, implementasi layanan ini akan tetap tidak ditentukan.

6.1. Menghasilkan POM Induk

Pertama, mari buat proyek induk :

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

Setelah induk dibuat, kita harus membuka file pom.xml yang terletak di direktori induk dan mengubah kemasannya menjadi pom.

pom

Dengan menyetel pengemasan ke jenis pom, kami menyatakan bahwa proyek akan berfungsi sebagai induk atau agregator - tidak akan menghasilkan artefak lebih lanjut.

Sekarang, setelah agregator kita selesai, kita dapat membuat submodul kita.

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

6.2. Membuat Submodul

Sebagai POM induk kami bernama orangtua-proyek , kita perlu memastikan bahwa kita berada di direktori induk dan menjalankan menghasilkan perintah:

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 perintah yang digunakan. Ini sama seperti yang kita gunakan untuk orang tua. Masalahnya di sini adalah, modul-modul ini adalah proyek Maven biasa, namun Maven menyadari bahwa modul tersebut bersarang. Ketika kami mengubah direktori menjadi proyek-induk , ditemukan bahwa induk memiliki pengemasan tipe pom dan memodifikasi kedua file pom.xml yang sesuai.

Setelah itu, Maven akan membuat tiga submodul dan memodifikasi file pom.xml orang tua dengan menambahkan beberapa tag:

 core service webapp 

Sekarang, induk kita secara eksplisit mendeklarasikan modul agregat.

Selanjutnya, saat menjalankan perintah paket mvn di direktori proyek induk, Maven akan membangun dan menguji ketiga modul tersebut.

Selain itu, Maven Reactor akan menganalisis proyek kami dan membangunnya dalam urutan yang benar. Jadi, jika kami webapp modul tergantung pada layanan modul, Maven akan membangun pertama layanan , maka webapp .

Lagi pula, jika kita ingin berbagi semua konfigurasi dengan submodul kita, di file pom.xml mereka , kita harus mendeklarasikan induknya:

 org.baeldung parent-project 1.0-SNAPSHOT 

Perlu kita perhatikan, bahwa submodul hanya dapat memiliki satu orang tua. Namun, kami dapat mengimpor banyak BOM. Detail lebih lanjut tentang file BOM dapat ditemukan di artikel ini.

6.3. Membangun Proyek

Sekarang kita dapat membangun ketiga modul sekaligus. Di direktori proyek induk, jalankan:

mvn package

Ini akan membangun semua modul, kita akan melihat output dari perintah 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] ------------------------------------------------------------------------

Reaktor mencantumkan proyek induk , tetapi karena jenis pom itu dikecualikan dan hasil build dalam tiga file .jar terpisah untuk semua modul lainnya. Jika demikian, build terjadi di tiga di antaranya.

7. Kesimpulan

Dalam tutorial ini, kami membahas manfaat menggunakan multi-modul Maven. Juga, kami membedakan antara POM induk Maven biasa dan POM agregat. Pada akhirnya, kami menunjukkan cara menyiapkan multi-modul sederhana untuk mulai dimainkan.

Maven adalah alat yang hebat tetapi kompleks itu sendiri. Jika Anda ingin menemukan detail lebih lanjut tentang Maven, lihat referensi Sonatype Maven atau panduan Apache Maven. Jika Anda mencari penggunaan lanjutan dari pengaturan multi-modul Maven, lihat bagaimana proyek Spring Boot memanfaatkan penggunaannya.

Semua contoh kode di Baeldung dibuat menggunakan Maven, jadi Anda dapat dengan mudah memeriksa situs web proyek GitHub kami untuk melihat berbagai konfigurasi Maven.