Apakah Maven itu? Membangun dan manajemen ketergantungan untuk Java

Apache Maven adalah landasan pengembangan Java, dan alat manajemen build yang paling banyak digunakan untuk Java. Model konfigurasi Maven yang efisien dan berbasis XML memungkinkan pengembang untuk dengan cepat mendeskripsikan atau memahami garis besar proyek berbasis Java, yang membuat memulai dan berbagi proyek baru dengan cepat. Maven juga mendukung pengembangan yang digerakkan oleh pengujian, pemeliharaan proyek jangka panjang, dan konfigurasi deklaratif serta berbagai plugin menjadikannya pilihan populer untuk CI / CD. Artikel ini adalah pengenalan singkat tentang Maven, termasuk POM Maven dan struktur direktori, serta perintah untuk membuat proyek Maven pertama Anda.

Perhatikan bahwa rilis Maven terbaru pada tulisan ini adalah Maven 3.6.3.

Maven vs Ant dan Gradle

Maven bukan satu-satunya alat build di ekosistem Java, meskipun ini yang paling populer. Ant, alat konfigurasi berbasis XML generasi sebelumnya, tidak memiliki manajemen ketergantungan dan praktik standar berbasis konvensi Maven, tetapi menawarkan fleksibilitas yang tidak akan Anda temukan dengan Maven. Gradle adalah fitur baru yang berjalan di atas ekosistem Maven (menggunakan repositori Maven), tetapi mendukung penggunaan DSL berbasis Groovy atau Kotlin untuk konfigurasi. Ketiganya adalah alat build yang bagus, dan masing-masing dapat diintegrasikan ke dalam proses CI / CD. Yang penting adalah memilih yang tepat untuk kebutuhan Anda dan mengetahui cara menggunakannya dengan tepat.

Bagaimana Maven bekerja

Seperti banyak alat hebat lainnya, Maven mengambil apa yang dulunya terlalu rumit (neraka konfigurasi) dan menyederhanakannya menjadi bagian-bagian yang dapat dicerna. Maven terdiri dari tiga komponen:

  • POM: File yang menjelaskan proyek Maven dan dependensinya.
  • Direktori: Format standar untuk mendeskripsikan proyek Maven di POM.
  • Repositori: Tempat perangkat lunak pihak ketiga disimpan dan ditemukan.

The Maven POM : Setiap proyek Java yang menggunakan Maven memiliki file POM (project object model) di direktori root-nya. The pom.xmlmenggambarkan dependensi proyek dan memberitahu Anda bagaimana untuk membangunnya. ( Dependensi adalah perangkat lunak pihak ketiga yang dibutuhkan oleh proyek. Beberapa contoh umum adalah JUnit dan JDBC. Lihat Maven Central Repository untuk daftar semua alat yang tersedia dan ketergantungan populer.)

Direktori Maven : Direktori Maven mengimplementasikan apa yang dikenal sebagai konvensi di atas konfigurasi , solusi elegan untuk konfigurasi neraka. Daripada meminta pengembang untuk menentukan tata letak dan komponen konfigurasi tangan untuk setiap proyek baru (seperti yang terjadi pada makefiledan Ant), Maven membuat struktur proyek yang umum dan menawarkan format file standar untuk menjelaskan cara kerjanya. Anda cukup memasukkan kebutuhan Anda, dan Maven memanggil dependensi dan mengonfigurasi proyek untuk Anda.

Repositori terpusat : Terakhir, Maven menggunakan repositori terpusat untuk menemukan dan menerbitkan paket proyek sebagai dependensi. Saat Anda mereferensikan dependensi dalam proyek Anda, Maven akan menemukannya di repositori terpusat, mengunduhnya ke repositori lokal, dan menginstalnya ke dalam proyek Anda. Seringkali, semua ini tidak terlihat oleh Anda sebagai pengembang.

Mengakses dependensi Maven

Secara default, Maven menyelesaikan dependensi dari Maven Central Repository. Alternatif umum adalah JCenter, yang memiliki kumpulan paket yang tersedia lebih luas. Organisasi juga menerbitkan dan menjadi tuan rumah repositori internal, yang bisa publik atau pribadi. Untuk mengakses repositori, Anda menentukan URL-nya di Maven POM, atau Anda dapat menginstruksikan Maven untuk mencari di repositori lain.

Menginstal Maven

Maven adalah proyek Java, jadi sebelum Anda menginstalnya, Anda harus menginstal JDK di lingkungan pengembangan Anda. (Lihat "Apa itu JDK? Pengantar Java Development Kit" untuk mengetahui lebih lanjut tentang mengunduh dan menginstal JDK.)

Setelah Anda menyiapkan lingkungan pengembangan Java, Anda dapat menginstal Maven hanya dalam beberapa langkah:

  1. Unduh rilis Maven terbaru (Maven 3.6.3 saat tulisan ini dibuat).
  2. Ekstrak apache.mavenfile .zip ke tempat yang nyaman.
  3. Tempatkan file itu di jalur Anda. Misalnya, pada sistem Unix atau Linux: ekspor PATH=$PATH:/home/maven/.

Sekarang Anda memiliki akses ke mvnperintah tersebut. Ketik mvn -vuntuk memastikan Anda berhasil menginstal Maven.

The Maven POM

Akar dari setiap proyek Maven adalah pom.xmlfilenya. Meskipun reputasinya membosankan, XML sebenarnya berfungsi dengan baik untuk kasus penggunaan ini. POM Maven mudah dibaca dan mengungkapkan banyak hal yang terjadi dalam sebuah proyek. (Jika Anda telah bekerja dengan JavaScript, pom.xmltujuannya serupa dengan package.jsonfile Node NPM .)

Kode 1 menunjukkan Maven yang sangat sederhana pom.xml.

Daftar 1. Simple Maven POM

   4.0.0 com.javaworld what-is-maven 1.0-SNAPSHOT Simple Maven Project jar   junit junit 4.12 test    

Memahami Maven POM

Setelah Anda memahaminya, POM tidak misterius. Untuk memulai, Anda dapat membaca sekilas XML preamble, yang hanya mereferensikan skema POM resmi. Namun perhatikan XML yang dimulai dengan modelVersion. Itu memberitahu Maven versi apa dari POM yang akan digunakan, dalam hal ini Maven POM 4.0.0.

Berikutnya, Anda memiliki groupId, artifactId, dan version. Bersama-sama, ketiga atribut ini mengidentifikasi secara unik setiap resource yang dikelola Maven dalam repositori. Atribut di bagian atas file ini menggambarkan proyek Maven Anda.

Sekarang, lihat dependenciesbagian POM, tempat kami menjelaskan dependensi proyek. Dalam kasus ini, sejauh ini kami hanya menarik satu dependensi, JUnit. Perhatikan bahwa JUnit juga dijelaskan dalam hal nya groupId, artifactIddan version.

Apakah Anda mendeskripsikan project Anda sendiri atau dependensi project, nilai-nilai ini secara konsisten memberi tahu Maven di mana harus menemukan project di repositori Maven, dan versi mana yang tersedia untuk digunakan.

Menghosting proyek Anda di repositori Maven

Ingatlah bahwa POM mendefinisikan semua yang dibutuhkan proyek Anda untuk dijalankan, tetapi juga menggambarkan proyek Anda sebagai potensi ketergantungan. Jika Anda sedang membangun sebuah proyek yang akan menjadi ketergantungan - katakanlah, membuat perpustakaan untuk digunakan proyek lain - Anda harus membuatnya tersedia dengan salah satu dari empat cara:

  1. Sediakan secara lokal.
  2. Publikasikan ke repositori jarak jauh yang dikelola secara pribadi.
  3. Publikasikan ke repositori pribadi berbasis cloud.
  4. Publikasikan ke repositori publik seperti Maven Central.

Dalam kasus pertama, Anda tidak menggunakan repositori jarak jauh sama sekali. Sebagai gantinya, pengembang lain akan mengunduh dan menginstal proyek Anda secara lokal ke repo Maven mereka, menggunakan mvn installperintah.

Dalam kasus kedua, Anda menggunakan repositori Maven yang dihosting, menggunakan server yang dikontrol secara pribadi untuk menerbitkan dan mendownload dependensi. Untuk ini, Anda memerlukan manajer repositori, seperti Apache Archiva.

Alternatif yang lebih baru adalah menggunakan repo jarak jauh pribadi, tetapi mengandalkan layanan berbasis cloud untuk mengelolanya, misalnya Cloudsmith. Ini memberikan keuntungan dari dependensi yang dihosting dari jarak jauh tanpa perlu membuat server repo. Layanan itu berbayar, tentu saja.

Akhirnya, sebagian kecil proyek akan berakhir di Central Maven Repository atau JCenter, yang ditujukan untuk paket publik yang banyak digunakan. Jika Anda membuat dependensi open-source untuk digunakan oleh orang lain, Anda akan memerlukan salah satu repositori terpusat ini agar karya Anda tersedia untuk dunia.

  • Pelajari lebih lanjut tentang menghosting proyek Anda di repositori Maven dan dapatkan daftar repositori yang tersedia.
  • Lihat dokumentasi resmi Maven tentang Maven Release Plugin, yang digunakan untuk mempersiapkan dan mengelola perangkat lunak yang diterbitkan ke repositori Maven.

Buat paket Maven

Jika Anda membuat pom.xmldari Listing 1 dan meletakkannya dalam sebuah direktori, Anda akan dapat menjalankan perintah Maven terhadapnya. Maven memiliki banyak perintah, dan lebih banyak lagi tersedia melalui plugin, tetapi Anda hanya perlu mengetahui sedikit untuk memulai.

Untuk perintah pertama Anda, coba jalankan mvn package. Meskipun Anda belum memiliki kode sumber apa pun, menjalankan perintah ini akan memberi tahu Maven untuk mengunduh dependensi JUnit. Anda dapat memeriksa keluaran pencatatan Maven untuk melihat bahwa ketergantungan telah dimuat ..

Lingkup ketergantungan

Anda mungkin telah memperhatikan ketergantungan JUnit dalam contoh POM yang ditandai sebagai scope test. Cakupan adalah konsep penting dalam manajemen ketergantungan, yang pada dasarnya memungkinkan Anda untuk menentukan dan membatasi bagaimana setiap ketergantungan akan dipanggil dan digunakan dalam proyek Anda. The testlingkup memastikan ketergantungan tersedia ketika menjalankan tes, tetapi tidak ketika aplikasi dikemas untuk penyebaran.

Cakupan umum lainnya adalah provided, yang memberi tahu framework bahwa dependensi disediakan oleh lingkungan runtime. Ini sering terlihat dengan Servlet JARS saat men-deploy ke container servlet, karena container akan menyediakan JARS tersebut. Lihat dokumentasi Apache Maven untuk daftar lengkap cakupan dependensi Maven.

Struktur direktori Maven

Ketika perintah selesai, perhatikan bahwa Maven telah membuat /targetdirektori. Itu adalah lokasi standar untuk keluaran proyek Anda. Dependensi yang telah Anda unduh akan berada di /targetdirektori, bersama dengan artefak aplikasi yang Anda kompilasi.

Selanjutnya Anda ingin menambahkan file Java, yang akan Anda tempatkan di src/direktori Maven . Buat /src/main/java/com/javaworld/Hello.javafile, dengan isi Listing 2.

Daftar 2. Hello.java

 com.javaworld public class Hello { public static void main(String[] args){ System.out.println("Hello, JavaWorld"); } } 

The /srcpath adalah tempat standar untuk file sumber proyek Anda. Sebagian besar proyek memasukkan file utamanya /src/main/, dengan file Java masuk ke classpath di bawah /java. Selain itu, jika Anda ingin menyertakan aset yang bukan kode, seperti file konfigurasi atau gambar, Anda dapat menggunakan /src/main/resources. Aset di jalur ini akan ditambahkan ke jalur kelas utama. File uji masuk ke /src/test/java.

Untuk meninjau, berikut adalah beberapa bagian penting dari struktur proyek Maven (sebagaimana ditentukan oleh Struktur Direktori Standar Maven):

Bagian penting dari Struktur Direktori Standar Maven

pom.xml File deskriptor proyek
/ src / main / java Lokasi file sumber
/ src / main / resources Lokasi aset non-sumber
/ src / test / java Lokasi file sumber pengujian
/target Lokasi keluaran build

Mengelola proyek Maven Anda

The mvn packageperintah menginstruksikan Maven bundel proyek. Berikan perintah ini saat Anda siap untuk mengumpulkan semua file proyek Anda di satu tempat. Ingatlah bahwa di file POM untuk proyek ini, kami menetapkan jenis pengemasan menjadi jar, jadi perintah ini memberi tahu Maven untuk mengemas file aplikasi ke dalam JAR.

Maven menawarkan berbagai opsi tambahan untuk mengontrol bagaimana JAR dikelola, apakah JAR itu gemuk atau tipis, dan menentukan file yang dapat dieksekusi mainclass. Lihat dokumen Maven untuk mempelajari lebih lanjut tentang manajemen file di Maven.

Setelah Anda memaketkan proyek, Anda mungkin ingin menerbitkan file mvn install. Perintah ini mendorong proyek ke dalam repositori Maven lokal. Setelah berada di repositori lokal, ini tersedia untuk proyek Maven lain di sistem lokal Anda. Ini berguna untuk pemandangan pengembangan di mana Anda dan / atau tim Anda membuat JAR ketergantungan yang belum dipublikasikan ke repositori pusat.

Perintah Maven tambahan

Masuk mvn testsaat Anda siap menjalankan pengujian unit yang telah Anda tetapkan di /src/java/testdirektori.

Masuk mvn compilesaat Anda siap untuk mengompilasi file kelas proyek. Jika Anda menjalankan penyiapan hot-deploy, perintah ini memicu pemuat kelas penerapan panas. (Alat hot-deploy - seperti mvn spring-boot:runperintah Spring Boot - akan mengawasi perubahan pada file kelas, dan kompilasi akan menyebabkan file sumber Anda dikompilasi, dan aplikasi yang berjalan akan mencerminkan perubahan tersebut.)

Memulai proyek baru: Pola Dasar di Maven dan Musim Semi

Pola dasar Maven adalah template untuk memulai proyek baru berdasarkan berbagai pengaturan yang telah ditentukan sebelumnya. Setiap arketipe menawarkan dependensi yang sudah dikemas sebelumnya, seperti untuk proyek aplikasi web Java EE atau Java. Anda juga dapat membuat arketipe baru dari proyek yang ada, lalu menggunakannya untuk membuat proyek baru dengan cepat berdasarkan tata letak yang telah ditentukan sebelumnya. Lihat dokumen Maven untuk mempelajari lebih lanjut tentang arketipe Apache Maven.

Framework Spring, yang berfungsi baik dengan Maven, menawarkan kemampuan tambahan yang canggih untuk menghentikan proyek baru. Sebagai contoh, Spring Initializr adalah alat yang memungkinkan Anda menentukan elemen yang Anda inginkan dengan cepat di aplikasi baru. Initializr bukanlah arketipe Maven, tetapi memiliki tujuan yang sama untuk menghasilkan tata letak proyek berdasarkan spesifikasi di muka. Dari dalam Initializr, Anda dapat mengetik mvn archetype:generatedan memindai melalui opsi untuk menemukan arketipe yang sesuai untuk apa yang Anda bangun.

Menambahkan dependensi