Apa itu Maven? Pembinaan dan pengurusan pergantungan untuk Java

Apache Maven adalah landasan pengembangan Java, dan alat pengurusan binaan yang paling banyak digunakan untuk Java. Model konfigurasi berasaskan XML yang diperkemas oleh Maven memungkinkan para pembangun untuk menerangkan atau memahami garis besar mana-mana projek berasaskan Java, yang menjadikan permulaan dan perkongsian projek baru menjadi pantas. Maven juga menyokong pengembangan berdasarkan ujian, penyelenggaraan projek jangka panjang, dan konfigurasi deklaratifnya dan pelbagai plugin menjadikannya pilihan yang popular untuk CI / CD. Artikel ini adalah pengenalan ringkas kepada Maven, termasuk struktur dan direktori Maven POM, dan arahan untuk membina projek Maven pertama anda.

Perhatikan bahawa keluaran terbaru Maven pada penulisan ini adalah Maven 3.6.3.

Maven vs Semut dan Gradle

Maven bukan satu-satunya alat binaan dalam ekosistem Jawa, walaupun merupakan alat yang paling popular. Semut, alat konfigurasi berasaskan XML generasi sebelumnya, tidak mempunyai amalan standard dan konvensyen Maven dan pengurusan pergantungan, tetapi menawarkan fleksibiliti yang tidak akan anda dapati dengan Maven. Gradle adalah alat yang lebih baru yang berjalan di atas ekosistem Maven (menggunakan repositori Maven), tetapi menyokong penggunaan DSL berasaskan Groovy atau Kotlin untuk konfigurasi. Ketiganya adalah alat binaan yang baik dengan sendirinya, dan masing-masing dapat disatukan ke dalam proses CI / CD. Yang penting ialah memilih yang tepat untuk keperluan anda dan mengetahui cara menggunakannya dengan tepat.

Bagaimana Maven berfungsi

Seperti banyak alat hebat, Maven mengambil apa yang dulunya terlalu rumit (konfigurasi neraka) dan mempermudahnya ke bahagian yang dapat dicerna. Maven terdiri daripada tiga komponen:

  • The POM: Fail yang menerangkan projek Maven dan kebergantungannya.
  • Direktori: Format standard untuk menerangkan projek Maven di POM.
  • Repositori: Tempat perisian pihak ketiga disimpan dan ditemui.

The Maven POM : Setiap projek Java yang menggunakan Maven memiliki file POM (model objek projek) dalam direktori rootnya. Ini pom.xmlmenerangkan kebergantungan projek dan memberitahu anda bagaimana membinanya. ( Ketergantungan adalah perisian pihak ketiga yang diperlukan oleh projek. Beberapa contoh umum adalah JUnit dan JDBC. Lihat Maven Central Repository untuk senarai semua alat yang tersedia dan pergantungan popular.)

Direktori Maven : Direktori Maven menerapkan apa yang dikenali sebagai konvensyen mengenai konfigurasi , penyelesaian elegan untuk konfigurasi. Daripada meminta pembangun untuk menentukan susun atur dan komponen konfigurasi tangan untuk setiap projek baru (seperti yang berlaku dengan makefiledan Ant), Maven menerapkan struktur projek yang sama dan menawarkan format fail standard untuk menerangkan cara kerjanya. Anda hanya memasukkan keperluan anda, dan Maven memanggil kebergantungan dan mengkonfigurasi projek untuk anda.

Repositori terpusat : Akhirnya, Maven menggunakan repositori terpusat untuk mencari dan menerbitkan pakej projek sebagai pergantungan. Apabila anda merujuk kebergantungan dalam projek anda, Maven akan menjumpainya di repositori terpusat, memuat turunnya ke repositori tempatan, dan memasangnya ke dalam projek anda. Selalunya, semua ini tidak dapat dilihat oleh anda sebagai pembangun.

Mengakses kebergantungan Maven

Secara lalai, Maven menyelesaikan kebergantungan dari Maven Central Repository. Alternatif biasa adalah JCenter, yang mempunyai lebih banyak pakej yang tersedia. Organisasi juga menerbitkan dan menjadi tuan rumah repositori dalaman, yang boleh menjadi awam atau peribadi. Untuk mengakses repositori, anda menentukan URL-nya di Maven POM, atau anda boleh mengarahkan Maven untuk mencari di repositori lain.

Memasang Maven

Maven adalah projek Java, jadi sebelum memasangnya, JDK perlu dipasang di persekitaran pembangunan anda. (Lihat "Apa itu JDK? Pengantar Java Development Kit" untuk lebih lanjut mengenai memuat turun dan memasang JDK.)

Setelah anda menyiapkan persekitaran pengembangan Java, anda boleh memasang Maven hanya dalam beberapa langkah:

  1. Muat turun keluaran Maven terbaru (Maven 3.6.3 pada penulisan ini).
  2. Ekstrak apache.mavenfail .zip ke tempat yang mudah.
  3. Letakkan fail itu di jalan anda. Contohnya, pada sistem Unix atau Linux: eksport PATH=$PATH:/home/maven/.

Anda sekarang harus mempunyai akses ke mvnperintah. Ketik mvn -vuntuk memastikan anda berjaya memasang Maven.

The Maven POM

Akar setiap projek Maven adalah pom.xmlfailnya. Walaupun mempunyai reputasi yang membosankan, XML berfungsi dengan baik untuk kes penggunaan ini. Maven's POM mudah dibaca dan mendedahkan banyak perkara yang berlaku dalam projek. (Sekiranya anda bekerja dengan JavaScript, pom.xmltujuannya serupa dengan package.jsonfail Node NPM .)

Penyenaraian 1 menunjukkan Maven yang sangat sederhana pom.xml.

Penyenaraian 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

Sebaik sahaja anda mengetahui, POM tidak misteri. Untuk memulakan, anda boleh membaca mukadimah XML, yang hanya merujuk kepada skema POM rasmi. modelVersionNamun, perhatikan XML bermula dengan . Itu memberitahu Maven versi POM apa yang akan digunakan, dalam hal ini Maven POM 4.0.0.

Seterusnya, anda perlu groupId, artifactIddan version. Bersama-sama, ketiga-tiga atribut ini secara unik mengenal pasti setiap sumber yang dikendalikan oleh Maven di repositori. Atribut ini di bahagian atas fail menggambarkan projek Maven anda.

Sekarang, lihat dependenciesbahagian POM, di mana kita menerangkan pergantungan projek. Dalam kes ini, kami hanya tinggal satu pergantungan, JUnit. Perhatikan bahawa JUnit juga digambarkan dari segi itu groupId, artifactIddan version.

Sama ada anda menggambarkan projek anda sendiri atau ketergantungan projek, nilai-nilai ini secara konsisten memberitahu Maven di mana untuk mencari projek di repositori Maven, dan versi mana yang tersedia untuk digunakan.

Menghoskan projek anda di repositori Maven

Perlu diingat bahawa POM menentukan semua yang perlu dijalankan oleh projek anda, tetapi ia juga menggambarkan projek anda sebagai kemungkinan pergantungan. Sekiranya anda membina projek yang akan menjadi kebergantungan - katakanlah, membuat perpustakaan untuk digunakan oleh projek lain - anda perlu menyediakannya dengan salah satu daripada empat cara:

  1. Sediakannya secara tempatan.
  2. Terbitkan ke repositori jauh yang diuruskan secara peribadi.
  3. Terbitkan ke repositori peribadi berasaskan awan.
  4. Terbitkan ke repositori awam seperti Maven Central.

Dalam kes pertama, anda sama sekali tidak menggunakan repositori jauh. Sebaliknya, pembangun lain akan memuat turun dan memasang projek anda secara tempatan ke repo Maven mereka, menggunakan mvn installarahan.

Dalam kes kedua, anda menggunakan repositori Maven yang dihoskan, menggunakan pelayan yang dikendalikan secara peribadi untuk menerbitkan dan memuat turun kebergantungan. Untuk ini, anda memerlukan pengurus repositori, seperti Apache Archiva.

Alternatif yang lebih baru adalah menggunakan repo jarak jauh peribadi, tetapi bergantung pada perkhidmatan berasaskan awan untuk menguruskannya, misalnya Cloudsmith. Ini memberi keuntungan dari kebergantungan yang dihoskan dari jarak jauh tanpa kerja memasang pelayan repo. Perkhidmatan itu dengan bayaran, tentu saja.

Akhirnya, sebilangan kecil projek akan berakhir di Central Maven Repository atau JCenter, yang ditujukan untuk pakej awam yang banyak digunakan. Sekiranya anda membuat kebergantungan sumber terbuka untuk digunakan oleh orang lain, anda memerlukan salah satu repositori terpusat ini untuk menjadikan karya anda tersedia untuk dunia.

  • Ketahui lebih lanjut mengenai hosting projek anda di repositori Maven dan dapatkan senarai repositori yang tersedia.
  • Lihat dokumentasi rasmi Maven mengenai Maven Release Plugin, digunakan untuk menyiapkan dan mengurus perisian yang diterbitkan ke repositori Maven.

Bina pakej Maven

Sekiranya anda membuat pom.xmldari Penyenaraian 1 dan memasukkannya ke dalam direktori, anda akan dapat menjalankan perintah Maven terhadapnya. Maven mempunyai banyak perintah, dan lebih banyak lagi tersedia melalui pemalam, tetapi anda hanya perlu mengetahui segelintir untuk memulakan.

Untuk arahan pertama anda, cuba jalankan mvn package. Walaupun anda belum mempunyai kod sumber, melaksanakan perintah ini memberitahu Maven untuk memuat turun ketergantungan JUnit. Anda boleh memeriksa output log Maven untuk melihat bahawa kebergantungan telah dimuat ..

Skop ketergantungan

Anda mungkin menyedari ketergantungan JUnit dalam contoh POM ditandai sebagai scope test. Skop adalah konsep penting dalam pengurusan kebergantungan, yang pada dasarnya membolehkan anda menentukan dan mengehadkan bagaimana setiap ketergantungan akan dipanggil dan digunakan dalam projek anda. The testskop memastikan kebergantungan didapati apabila menjalankan ujian, tetapi tidak apabila aplikasi dibungkus untuk penempatan.

Skop umum lain adalah provided, yang memberitahu kerangka kerja bahawa ketergantungan disediakan oleh lingkungan waktu proses. Ini sering dilihat dengan Servlet JARS ketika menggunakan ke servlet container, kerana container tersebut akan menyediakan JARS tersebut. Lihat dokumentasi Apache Maven untuk senarai lengkap ruang lingkup kebergantungan Maven.

Struktur direktori Maven

Apabila perintah selesai, perhatikan bahawa Maven telah membuat /targetdirektori. Itu adalah lokasi standard untuk output projek anda. Ketergantungan yang anda muat turun akan berada di dalam /targetdirektori, bersama dengan artifak aplikasi anda yang disusun.

Seterusnya anda ingin menambahkan fail Java, yang akan anda letakkan di src/direktori Maven . Buat /src/main/java/com/javaworld/Hello.javafail, dengan kandungan Penyenaraian 2.

Penyenaraian 2. Hello.java

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

Yang /srcjalan adalah tempat yang standard untuk fail sumber projek anda. Sebilangan besar projek memasukkan fail utama mereka /src/main/, dengan fail Java masuk ke classpath di bawah /java. Selain itu, jika anda ingin memasukkan aset yang bukan kod, seperti fail konfigurasi atau gambar, anda boleh menggunakannya /src/main/resources. Aset dalam laluan ini akan ditambahkan ke jalan kelas utama. Fail ujian masuk /src/test/java.

Untuk meninjau, berikut adalah beberapa bahagian penting dari struktur projek Maven (seperti yang ditentukan oleh Struktur Direktori Standard Maven):

Bahagian utama Struktur Direktori Standard Maven

pom.xml Fail penerangan projek
/ src / main / java Lokasi fail sumber
/ src / utama / sumber Lokasi aset bukan sumber
/ src / test / java Lokasi fail sumber ujian
/ sasaran Lokasi output binaan

Menguruskan projek Maven anda

The mvn packageperintah mengarahkan Maven berkas projek. Keluarkan perintah ini apabila anda sudah siap mengumpulkan semua fail projek anda di satu tempat. Ingatlah bahawa dalam fail POM untuk projek ini, kami menetapkan jenis pembungkusan jar, jadi perintah ini memberitahu Maven untuk mengemas fail aplikasi ke dalam JAR.

Maven menawarkan pelbagai pilihan tambahan untuk mengawal bagaimana JAR dikendalikan, sama ada JAR yang gemuk atau kurus, dan menentukan yang boleh dilaksanakan mainclass. Lihat dokumen Maven untuk mengetahui lebih lanjut mengenai pengurusan fail di Maven.

Selepas anda menggabungkan projek, anda mungkin mahu mengeluarkannya mvn install. Perintah ini mendorong projek itu ke repositori Maven tempatan. Setelah berada di repositori tempatan, ia tersedia untuk projek Maven lain dalam sistem tempatan anda. Ini berguna untuk pemandangan pembangunan di mana anda dan / atau pasukan anda membuat JAR ketergantungan yang belum diterbitkan ke repositori pusat.

Perintah Maven Tambahan

Masukkan mvn testapabila anda sudah bersedia untuk menjalankan ujian unit yang telah anda tetapkan dalam /src/java/testdirektori.

Masukkan mvn compileapabila anda sudah bersedia untuk menyusun fail kelas projek. Sekiranya anda menjalankan penyediaan penyebaran panas, perintah ini akan mencetuskan pemuat kelas penyebaran panas. (Alat mvn spring-boot:runpenyebaran panas - seperti perintah Spring Boot - akan memerhatikan perubahan kelas, dan penyusunan akan menyebabkan fail sumber anda disusun, dan aplikasi yang sedang berjalan akan mencerminkan perubahan tersebut.)

Memulakan projek baru: Archetypes in Maven and Spring

A Maven pola asas adalah template untuk memulakan projek baru berdasarkan pelbagai tetapan yang telah ditetapkan. Setiap jenis arket menawarkan dependensi pra-paket, seperti untuk proyek aplikasi web Java EE atau Java. Anda juga dapat membuat arketipe baru dari projek yang ada, kemudian menggunakannya untuk membuat projek baru dengan cepat berdasarkan susun atur yang telah ditentukan sebelumnya. Lihat dokumen Maven untuk mengetahui lebih lanjut mengenai pola dasar Apache Maven.

Kerangka Spring, yang berfungsi dengan baik dengan Maven, menawarkan kemampuan tambahan dan canggih untuk membendung projek baru. Sebagai contoh, Spring Initializr adalah alat yang membolehkan anda dengan cepat menentukan elemen yang anda mahukan dalam aplikasi baru. Initializr bukan sejenis pola dasar Maven, tetapi berfungsi untuk tujuan yang sama untuk menghasilkan susun atur projek berdasarkan spesifikasi di muka. Dari dalam Initializr, anda boleh menaip mvn archetype:generatedan mengimbas pilihan untuk mencari arketipe yang sesuai untuk apa yang anda bina.

Menambah kebergantungan