Apa manfaat utama menggunakan pakar sihir dibandingkan dengan katakanlah semut? Tampaknya lebih menjengkelkan daripada alat yang bermanfaat. Saya menggunakan maven 2, dengan Java Eclipse EE biasa (tanpa m2eclipse), dan kucing jantan.
Pendukung pakar percaya itu
Maven memungkinkan Anda mendapatkan dependensi paket dengan mudah
Maven memaksa Anda untuk memiliki struktur direktori standar
Dalam pengalaman saya
Mencari tahu dependensi paket benar-benar tidak sulit. Anda jarang melakukannya. Mungkin sekali selama pengaturan proyek dan beberapa lagi selama peningkatan. Dengan maven, Anda akan akhirnya memperbaiki dependensi yang tidak cocok, pom yang ditulis dengan buruk, dan melakukan pengecualian paket.
Siklus FIX-COMPILE-DEPLOY-DEBUG yang lambat, yang membunuh produktivitas. Ini keluhan utama saya. Anda membuat perubahan, Anda harus menunggu untuk membangun pakar untuk menendang dan menunggu untuk digunakan. Tidak ada penyebaran panas sama sekali.
Atau apakah saya salah melakukannya? Tolong arahkan saya ke arah yang benar, saya semua telinga.
sumber
Jawaban:
Tidak sulit ... untuk proyek mainan. Tetapi proyek yang saya kerjakan memiliki banyak, sangat banyak, dari mereka, dan saya sangat senang mendapatkannya secara transitif, untuk memiliki skema penamaan standar untuk mereka. Mengelola semua ini secara manual dengan tangan akan menjadi mimpi buruk.
Dan ya, kadang-kadang Anda harus bekerja pada konvergensi dependensi. Tapi pikirkan dua kali, ini tidak melekat pada Maven, ini melekat pada sistem yang menggunakan dependensi (dan saya berbicara tentang dependensi Java secara umum di sini).
Jadi dengan Ant, Anda harus melakukan pekerjaan yang sama kecuali Anda harus melakukan semuanya secara manual: meraih beberapa versi proyek A dan dependensinya, meraih beberapa versi proyek B dan dependensinya, mencari tahu sendiri versi persis apa yang mereka gunakan, memeriksa bahwa mereka tidak tumpang tindih, memeriksa bahwa mereka tidak kompatibel, dll. Selamat datang di neraka.
Di sisi lain, Maven mendukung manajemen dependensi dan akan mengambilnya secara transitif untuk saya dan memberi saya alat yang saya butuhkan untuk mengelola kompleksitas yang melekat pada manajemen dependensi : Saya dapat menganalisis pohon dependensi, mengontrol versi yang digunakan dalam dependensi transitif, mengecualikan beberapa dari mereka jika diperlukan, mengontrol konvergensi lintas modul, dll. Tidak ada keajaiban. Tetapi setidaknya Anda memiliki dukungan.
Dan jangan lupa bahwa manajemen ketergantungan hanya sebagian kecil dari apa yang ditawarkan Maven, ada lebih banyak (bahkan tidak menyebutkan alat-alat lain yang terintegrasi dengan baik dengan Maven, misalnya Sonar ).
Pertama, mengapa Anda menggunakan Maven seperti ini? Bukan saya. Saya menggunakan IDE saya untuk menulis tes, kode sampai lulus, refactor, menyebarkan, menyebarkan panas dan menjalankan build Maven lokal ketika saya selesai, sebelum melakukan, untuk memastikan saya tidak akan merusak build yang berkelanjutan.
Kedua, saya tidak yakin menggunakan Ant akan membuat segalanya lebih baik. Dan menurut pengalaman saya, pembuatan Maven modular menggunakan dependensi biner memberi saya waktu pembuatan yang lebih cepat daripada build Ant monolitik biasa. Pokoknya, lihat Maven Shell untuk siap (kembali) menggunakan lingkungan Maven (yang luar biasa).
Jadi pada akhirnya, dan saya minta maaf untuk mengatakannya, bukan Maven yang benar-benar membunuh produktivitas Anda, melainkan Anda menyalahgunakan alat Anda. Dan jika Anda tidak senang dengan itu, apa yang bisa saya katakan, jangan menggunakannya. Secara pribadi, saya menggunakan Maven sejak 2003 dan saya tidak pernah melihat ke belakang.
sumber
Maven dapat dianggap sebagai alat pengembangan proyek yang lengkap tidak hanya membangun alat seperti Ant. Anda harus menggunakan Eclipse IDE dengan plugin maven untuk memperbaiki semua masalah Anda.
Berikut adalah beberapa keuntungan dari Maven, dikutip dari Manfaat menggunakan halaman Maven :
sumber
Menemukan ketergantungan untuk proyek-proyek kecil tidaklah sulit. Tetapi begitu Anda mulai berurusan dengan pohon dependensi dengan ratusan dependensi, hal-hal dapat dengan mudah lepas kendali. (Saya berbicara dari pengalaman di sini ...)
Poin lainnya adalah jika Anda menggunakan IDE dengan kompilasi tambahan dan dukungan Maven (seperti Eclipse + m2eclipse), maka Anda harus dapat mengatur edit / compile / hot deploy dan test.
Saya pribadi tidak melakukan ini karena saya tidak mempercayai mode perkembangan ini karena pengalaman buruk di masa lalu (sebelum Maven). Mungkin seseorang dapat berkomentar apakah ini benar-benar berfungsi dengan Eclipse + m2eclipse.
sumber
Maven adalah salah satu alat di mana Anda harus benar-benar memutuskan di muka bahwa Anda menyukainya dan ingin menggunakannya, karena Anda akan menghabiskan cukup banyak waktu untuk mempelajarinya, dan setelah membuat keputusan tersebut sekali dan untuk semua akan memungkinkan Anda untuk melewati semua jenis keraguan saat belajar (karena Anda suka dan ingin menggunakannya)!
Kebaktian yang kuat membantu di banyak tempat - seperti Hudson yang dapat melakukan keajaiban dengan proyek Maven - tetapi mungkin sulit untuk melihat pada awalnya.
sunting: Pada 2016 Maven adalah satu-satunya alat Java build di mana ketiga IDE utama dapat menggunakan sumber di luar kotak. Dengan kata lain, menggunakan pakar membuat agnostik IDE-build Anda. Ini memungkinkan misalnya menggunakan profil Netbeans bahkan jika Anda biasanya bekerja dalam gerhana
sumber
Keuntungan Maven dibandingkan semut cukup sedikit. Saya mencoba merangkumnya di sini.
Convention over Configuration
Maven menggunakan pendekatan khusus untuk tata letak proyek dan startup, yang membuatnya mudah untuk hanya melompat dalam proyek. Biasanya hanya dibutuhkan checkount dan perintah pakar untuk mendapatkan artefak proyek.
Modularisasi
Proyek Konvensi proyek menyarankan (atau lebih baik, memaksa) pengembang untuk memodulasi proyek. Alih-alih proyek monolitik Anda sering dipaksa untuk membagi proyek Anda dalam sub-komponen yang lebih kecil, yang membuatnya lebih mudah men-debug dan mengelola keseluruhan struktur proyek
Manajemen Ketergantungan dan Siklus Hidup Proyek
Secara keseluruhan, dengan konfigurasi SCM yang baik dan repositori internal, manajemen dependensi cukup mudah, dan Anda sekali lagi dipaksa untuk berpikir dalam hal Siklus Hidup Proyek - versi komponen, manajemen rilis dan sebagainya. Sedikit lebih kompleks daripada semut, tapi sekali lagi, peningkatan kualitas proyek.
Apa yang salah dengan pakar sihir?
Maven tidak mudah. Siklus build (apa yang dilakukan dan kapan) tidak begitu jelas dalam POM. Juga, beberapa masalah muncul dengan kualitas komponen dan ketergantungan yang hilang dalam repositori publik.
Pendekatan terbaik (bagi saya) adalah memiliki repositori internal untuk caching (dan menjaga) dependensi di sekitar, dan menerapkan untuk melepaskan manajemen komponen. Untuk proyek yang lebih besar dari proyek sampel dalam buku, Anda akan berterima kasih kepada pakar sebelum atau sesudah
sumber
Maven dapat memberikan manfaat untuk proses pembangunan Anda dengan menerapkan konvensi dan praktik standar untuk mempercepat siklus pengembangan Anda sementara pada saat yang sama membantu Anda mencapai tingkat kesuksesan yang lebih tinggi. Untuk tampilan yang lebih rinci tentang bagaimana Maven dapat membantu Anda dengan proses pengembangan Anda, lihat Manfaat Menggunakan Maven.
sumber
Maven adalah alat manajemen proyek yang kuat yang didasarkan pada POM (model objek proyek). Ini digunakan untuk membangun proyek, ketergantungan dan dokumentasi. Ini menyederhanakan proses pembuatan seperti ANT. Tapi itu terlalu maju daripada ANT. Maven membantu mengelola- Bangun, Dokumentasi, Pelaporan, SCM, Rilis, Distribusi. - Repositori maven adalah direktori file JAR yang dipaket dengan file pom.xml. Maven mencari dependensi dalam repositori.
sumber
Saya tidak pernah menemukan poin 2? Bisakah Anda menjelaskan mengapa menurut Anda hal ini memengaruhi penerapan dengan cara apa pun. Jika sesuatu pakar memungkinkan Anda untuk menyusun proyek Anda dengan cara modularised yang benar-benar memungkinkan perbaikan panas untuk bug di tingkat tertentu, dan memungkinkan pengembangan independen API dari sisa proyek misalnya.
Ada kemungkinan bahwa Anda mencoba menjejalkan semuanya ke dalam satu modul, dalam hal ini masalahnya bukan benar-benar pakar, tetapi cara Anda menggunakannya.
sumber
Seharusnya ini komentar, tapi panjangnya tidak pas, jadi saya mempostingnya sebagai jawaban.
Semua manfaat yang disebutkan dalam jawaban lain dapat dicapai dengan cara yang lebih sederhana daripada menggunakan pakar. Misalnya, jika Anda baru mengenal suatu proyek, Anda tetap akan menghabiskan lebih banyak waktu untuk membuat arsitektur proyek, menggabungkan komponen, mengkode daripada mengunduh guci dan menyalinnya ke folder lib. Jika Anda berpengalaman dalam domain Anda, maka Anda sudah tahu bagaimana memulai proyek dengan pustaka apa. Saya tidak melihat manfaat menggunakan pakar, terutama ketika itu menimbulkan banyak masalah saat secara otomatis melakukan "manajemen ketergantungan".
Saya hanya memiliki pengetahuan tingkat menengah maven, tetapi saya katakan, saya telah melakukan proyek besar (seperti ERP) tanpa menggunakan maven.
sumber