Apa yang dilakukan Maven, dalam teori dan dalam praktik? Kapan layak menggunakannya? [Tutup]

156

Saya akan memulai proyek Java hanya untuk latihan. Saya sudah membaca tentang Maven, tetapi saya tidak benar-benar mengerti kapan itu dimaksudkan untuk digunakan.

Bisakah Anda memberi saya beberapa tips praktis? Apakah Maven banyak membantu? Apa yang sebenarnya dilakukan Maven untuk proyek saya?

Piotr Krysiak
sumber
Hej, lihat pertanyaan saya tentang Maven, Spring dan Roo ini. Saya banyak menggunakan Maven ketika bekerja dengan Eclipse dan untuk mempercepat waktu pengembangan. Tetapi ada beberapa masalah. Saya pikir Anda perlu memahami sistem penjelasan Java bersama dengan Maven. Tapi lihat pertanyaan yang saya
tautkan
@ArtB memberikan penjelasan yang bagus tentang apa itu Maven. Namun, seperti yang saya katakan dalam komentar saya untuk jawabannya, saya tidak berpikir Anda harus menggunakannya. Jika Anda menginginkan alat bangun, gunakan Gradle. Unduh, instal, lalu dalam proyek Anda buat file bernama build.gradleyang hanya berisi satu baris yang mengatakan apply plugin: 'java'. Dengan asumsi kode sumber Anda ada di tempat biasa ( src/main/java, unit test in src/test/java), Anda sekarang dapat membangun, menguji, dan mengemas kode Anda dengan mengatakan gradle build. Mudah!
Tom Anderson
2
Untuk menggunakan Gradle Anda harus belajar Groovy dan Anda pasti akan menemukan proyek menggunakan Maven sehingga masih perlu dipelajari. Juga, memahami Maven akan membuat memahami alat lain yang datang setelah itu lebih mudah.
Kereta luncur
Apa yang harus dilakukan Maven dengan anotasi Java?
Kereta luncur
1
+1 untuk Gradle, tidak hanya lebih dekat dengan rumah bagi pengembang java, ia dapat menggunakan kembali artefak pakar dan juga dapat membuat bangunan non standar dengan mudah stackoverflow.com/questions/1163173/…
Kalpesh Soni

Jawaban:

183

Apa yang dilakukannya

Maven adalah "alat manajemen bangun", ini untuk menentukan bagaimana .javafile Anda dikompilasi .class, dikemas ke dalam .jar(atau .waratau .ear) file, (sebelum / sesudah) diproses dengan alat, mengelola CLASSPATH, dan semua jenis tugas yang diperlukan untuk bangun proyek Anda. Ini mirip dengan Apache Semut atau Gradle atau Makefiles di C / C ++, tetapi berusaha sepenuhnya mandiri di dalamnya bahwa Anda tidak perlu memerlukan alat atau skrip tambahan dengan memasukkan tugas umum lainnya seperti mengunduh & menginstal perpustakaan yang diperlukan dll.

Ini juga dirancang di sekitar tema "build portability", sehingga Anda tidak mendapatkan masalah memiliki kode yang sama dengan buildscript yang sama bekerja pada satu komputer tetapi tidak pada yang lain (ini adalah masalah yang diketahui, kami memiliki VM Windows 98 mesin karena kami tidak bisa mendapatkan beberapa aplikasi Delphi kami yang sedang dikompilasi di tempat lain). Karena itu, ini juga merupakan cara terbaik untuk mengerjakan proyek antara orang-orang yang menggunakan IDE berbeda karena skrip Ant yang dihasilkan IDE sulit untuk diimpor ke IDE lain, tetapi semua IDE saat ini memahami dan mendukung Maven ( IntelliJ , Eclipse , dan NetBeans ). Bahkan jika Anda tidak menyukai Maven, itu akhirnya menjadi titik acuan untuk semua alat bangunan modern lainnya.

Kenapa Anda harus menggunakannya

Ada tiga hal tentang Maven yang sangat baik.

  1. Maven akan (setelah Anda menyatakan mana yang Anda gunakan) mengunduh semua perpustakaan yang Anda gunakan dan perpustakaan yang mereka gunakan untuk Anda secara otomatis. Ini sangat bagus, dan membuat berurusan dengan banyak perpustakaan sangat mudah. Ini memungkinkan Anda menghindari "neraka ketergantungan" . Mirip dengan Apache Ant's Ivy .

  2. Ini menggunakan " Convention over Configuration " sehingga secara default Anda tidak perlu mendefinisikan tugas yang ingin Anda lakukan. Anda tidak perlu menulis langkah "kompilasi", "tes", "paket", atau "bersih" seperti yang harus Anda lakukan di Ant atau Makefile. Cukup letakkan file di tempat-tempat di mana Maven mengharapkannya dan itu akan berhasil.

  3. Maven juga memiliki banyak plug-in bagus yang dapat Anda instal yang akan menangani banyak tugas rutin mulai dari menghasilkan kelas Java dari skema XSD menggunakan JAXB hingga mengukur cakupan pengujian dengan Cobertura . Cukup tambahkan mereka ke Anda pom.xmldan mereka akan berintegrasi dengan semua hal lain yang ingin Anda lakukan.

Kurva pembelajaran awal curam, tetapi (hampir) setiap pengembang Java profesional menggunakan Maven atau keinginan yang mereka lakukan. Anda harus menggunakan Maven pada setiap proyek walaupun tidak heran jika Anda perlu waktu untuk membiasakan diri dengannya dan bahwa kadang-kadang Anda berharap dapat melakukan hal-hal secara manual, karena mempelajari sesuatu yang baru terkadang menyakitkan. Namun, begitu Anda benar-benar terbiasa dengan Maven, Anda akan menemukan bahwa pengelolaan gedung hampir tidak memerlukan waktu sama sekali.

Bagaimana Memulai

Tempat terbaik untuk memulai adalah " Maven dalam 5 Menit ". Ini akan membuat Anda mulai dengan proyek yang siap Anda buat kode dengan semua file dan folder yang diperlukan (ya, saya sarankan menggunakan arketipe quickstart, setidaknya pada awalnya).

Setelah Anda mulai, Anda akan membutuhkan pemahaman yang lebih baik tentang bagaimana alat ini dimaksudkan untuk digunakan. Untuk itu " Better Builds with Maven " adalah tempat yang paling teliti untuk memahami nyali bagaimana kerjanya, " Maven: The Complete Reference " lebih mutakhir. Baca yang pertama untuk memahami, tetapi kemudian gunakan yang kedua untuk referensi.

Kereta luncur
sumber
12
Ada banyak pengembang Java profesional yang tidak menggunakan Maven dan senang mereka tidak melakukannya; beberapa di antaranya hanya menolak kompleksitas dan ketidakfleksibelannya dan tetap dengan Semut atau sejenisnya, tetapi semakin banyak dari mereka adalah orang yang telah beralih ke penerus Maven seperti Gradle dan Buildr. Para penerus ini mewarisi dari Maven gagasan untuk memberikan serangkaian langkah membangun yang kuat dari kotak, tetapi membuatnya lebih mudah untuk menambahkan langkah-langkah khusus juga. Mengingat keberadaan mereka, saya jujur ​​tidak berpikir ada alasan untuk menggunakan Maven untuk proyek baru.
Tom Anderson
5
Selalu ada pertanyaan tentang berapa banyak detail untuk dimasukkan ke dalam jawaban, tetapi jika Anda adalah pengembang Java rata-rata yang di kantor Anda kemungkinan baik Maven atau menyebalkan neraka (Ant + bash + perl + membangun komputer yang dikonfigurasi dengan jalur ajaib). Jika Anda salah satu dari sedikit yang beruntung bekerja dengan pengembang A + di lingkungan yang baik dengan kebebasan untuk memilih ada opsi lain (Gradle menjadi satu). Tetapi jika Anda bekerja di tempat biasa, Maven adalah alat terbaik yang tidak membiarkan rekan kerja Anda memotong diri dengan sesuatu yang runcing.
Kereta luncur
4
Saya tidak berpikir Anda harus menjadi pengembang A + untuk menggunakan Gradle. Saya tidak mengerti mengapa organisasi yang bisa mengadopsi Maven tidak bisa mengadopsi Gradle. Memang benar bahwa Gradle memungkinkan Anda menembak diri sendiri, dengan cara yang sama seperti yang dilakukan Ant, tetapi dengan cara yang membuat Maven cukup keras (dan saya memiliki koleksi kaki tembakan rekan kerja saya untuk membuktikannya); itu adalah kompromi untuk memungkinkan untuk melakukan hal-hal yang membuat Maven hampir mustahil.
Tom Anderson
4
Dalam hal menggunakan sesuatu seperti Gradle dan menghindari tembakan kaki, saya mengusulkan klasifikasi triase programmer. Beberapa pemrogram tidak akan takut untuk mengedit skrip pembuatan, dan memperbaiki semuanya. Orang-orang itu berguna. Beberapa programmer takut dengan skrip build, dan tidak akan menyentuhnya. Setidaknya orang-orang itu tidak berbahaya; Saya sudah berada di tim 12 orang di mana hanya kami berdua yang berani menyentuh bangunan, dan itu benar-benar bekerja dengan baik. Beberapa programmer tidak takut dengan skrip build, tetapi akan mengacaukannya jika mereka menyentuhnya. Orang-orang itu berbahaya.
Tom Anderson
1
jadi seperti npm untuk Java
KJW
9

Dari dokumen Sonatype :

Jawaban untuk pertanyaan ini tergantung pada perspektif Anda sendiri. Sebagian besar pengguna Maven akan menyebut Maven sebagai "alat bangun": alat yang digunakan untuk membangun artefak yang dapat digunakan dari kode sumber. Insinyur bangunan dan manajer proyek mungkin menyebut Maven sebagai sesuatu yang lebih komprehensif: alat manajemen proyek. Apa bedanya? Alat bangun seperti Ant hanya berfokus pada preprocessing, kompilasi, pengemasan, pengujian, dan distribusi. Alat manajemen proyek seperti Maven menyediakan superset fitur yang ditemukan dalam alat membangun. Selain menyediakan kemampuan membangun, Maven juga dapat menjalankan laporan, membuat situs web, dan memfasilitasi komunikasi di antara anggota tim kerja.

Saya sangat merekomendasikan melihat dokumen Sonatype dan meluangkan waktu untuk melihat plugin yang tersedia untuk memahami kekuatan Maven.

Sangat singkat, ini beroperasi pada tingkat konseptual yang lebih tinggi daripada (katakanlah) Ant. Dengan Ant, Anda akan menentukan set file dan sumber daya yang ingin Anda buat, lalu tentukan bagaimana Anda ingin mereka disatukan, dan tentukan urutan yang harus terjadi (bersih / kompilasi / toples). Dengan Maven ini semua tersirat. Maven berharap menemukan file Anda di tempat-tempat tertentu, dan akan bekerja secara otomatis dengan itu. Konsekuensinya, membuat proyek dengan Maven bisa menjadi jauh lebih sederhana, tetapi Anda harus bermain sesuai aturan Maven!

Brian Agnew
sumber
Saya tidak menurunkannya, tetapi mungkin para downvoter membaca kutipan Anda dari propaganda Sonatype sebagai dukungan implisit dari filosofi totaliter "alat manajemen proyek" Maven.
Tom Anderson
1
Saya tidak merasa bahwa Anda menjawab pertanyaan OP, sebaliknya Anda hanya memposting omelan pemasaran ... dan omongan itu konyol karena "manajemen proyek" jauh lebih banyak daripada apa yang dikerjakan Maven untuk membingungkan lebih banyak daripada membantu, MENURUT OPINI SAYA.
Kereta luncur
2
@ Brian Maaf, jika komentar saya sebelumnya terdengar berapi-api, tapi izinkan saya ulangi lagi: Saya merasa komentar Anda hanya menjelaskan Maven dengan baik jika Anda sudah mengerti apa itu Maven, tetapi sebagai titik awal, itu tidak membantu.
Kereta luncur
5

Mavenadalah alat membangun. Bersama Antatau Gradleada Javaalat untuk membangun.
Jika Anda seorang pemula di Jawa meskipun hanya membangun menggunakan IDE Anda karena Mavenmemiliki kurva belajar yang curam.

Cratylus
sumber
Dukungan IDE untuk Maven di NetBeans sangat baik, membuat kurva belajar hampir tidak ada.
Kapten Giraffe