Mengapa Apache memiliki dua alat terpisah untuk membangun dan manajemen ketergantungan?

9

Apache memiliki dua alat terpisah:

Mereka berdua mengisi ceruk yang sama. Saya punya dua pertanyaan:

  1. Apa yang menjadi sorotan dari perbedaan utama antara kedua alat?
    • Saya yakin artikel yang sangat panjang dapat ditulis tentang perbedaan antara keduanya, saya tidak mencari banyak detail, juga tidak mencari argumen subyektif untuk memilih satu di antara yang lain.
  2. Sejarah pemrograman - bagaimana bisa terjadi bahwa Apache berevolusi untuk membuat dua set alat yang sepenuhnya terpisah yang pada akhirnya sangat mirip tujuannya?
durron597
sumber

Jawaban:

7

Apa yang menjadi sorotan dari perbedaan utama antara kedua alat?

  • Struktur proyek

    • Maven lebih suka struktur proyek tertentu: seseorang harus berkomitmen untuk melakukan hal-hal The Maven Way. Maven hadir dengan langkah-langkah build umum yang sudah dikonfigurasi dalam root pom.xmlyang biasanya diwarisi oleh semua proyek lain pom.xml.

    • Ant + Ivy lebih terbuka: walaupun dapat melakukan banyak hal, hanya ada beberapa persyaratan dasar dalam hal struktur proyek atau penggunaan skrip. Tidak ada tugas, sasaran, atau proses pembangunan yang ditentukan sebelumnya. Masing build.xml- masing adalah batu tulis yang bersih (kecuali termasuk skrip lain, tentu saja).

  • Orientasi

    • Maven berorientasi pada tujuan . Anda tidak mengatakan "jalankan target build ini" Anda memintanya untuk "build" atau "deploy" dan Maven melakukan apa pun yang perlu dilakukan untuk sampai ke sana: Anda mengatakan apa yang ingin Anda lakukan.

    • Ant + Ivy berorientasi tugas . Setiap tugas ditentukan oleh implementasi dan kustom. Anda mengatakannya bagaimana melakukan apa yang Anda inginkan.

  • Manajemen Ketergantungan

    • Maven terkenal karena menangani dependensi secara otomatis. Ini akan mengunduh versi yang benar sambil membangun tanpa interaksi pengguna selama URL repositori dikonfigurasikan sebelumnya.

    • Ant tidak memiliki manajemen ketergantungan kecuali untuk "Java Classpath." Ivy menambahkan manajemen ketergantungan yang sedikit lebih membosankan daripada Maven tetapi masih otomatis. Kuncinya di sini adalah Anda tidak dapat memilih manajemen dependensi (mis. "Toples yang disertakan dalam distro saya atau memeriksa ke dalam kontrol sumber") atau Anda dapat mengalihdayakannya melalui Ivy. Pilihan itu berarti lebih banyak fleksibilitas untuk memenuhi kebutuhan proyek.

  • Kemudahan penggunaan

    • Maven (secara teori) mudah digunakan. Setiap pengembang dapat mengambil proyek Maven dan segera tahu di mana semua sumber daya proyek berada dan untuk apa mereka: ini karena poin pertama tentang Maven memiliki cara tertentu dalam melakukan sesuatu.

    • Ant + Ivy mungkin memiliki kurva belajar yang lebih curam karena setiap proyek dapat berbeda. Proyek yang berbeda mungkin memiliki cara yang berbeda untuk mencapai tujuan yang sama.

  • Kemungkinan diperpanjang

    • Maven memungkinkan penulisan plugin dan mengubah proses pembuatannya. Namun, itu keluar dari kotak dengan root pom.xmlyang mendorong pengembang menuju proses build yang telah ditentukan. Tujuan baru atau langkah-langkah pembangunan membutuhkan pemikiran yang cermat dan upaya ekstra untuk menyuntikkan ke dalam proses pembangunan.

    • Ant + Ivy juga memungkinkan plugins menulis dan tugas baru: melakukannya cukup mudah dan orang dapat mengintegrasikan tugas baru dengan upaya minimal. Tidak ada tujuan atau target yang telah ditentukan untuk bergerak atau mengintegrasikan tugas baru seseorang ke dalamnya.

Bagaimana bisa terjadi bahwa Apache berevolusi untuk membuat dua set alat yang benar-benar terpisah yang pada akhirnya begitu mirip tujuannya?

Hal pertama yang harus dipahami adalah proyek Apache tidak lebih dari payung di mana proyek terpisah dan independen beroperasi. Tim yang berbeda bekerja pada proyek yang berbeda. Sementara masing-masing pengembang dapat bekerja pada banyak proyek, tidak ada beberapa roadmap keseluruhan yang menggabungkan Ant, Ivy, dan Maven.

Semut yang lebih dulu. Itu dirancang untuk menjadi setara Java dari Make. Sementara Make dapat membangun proyek Java, itu membosankan: Make ada untuk mengkompilasi sekelompok unit kompilasi secara terpisah kemudian menautkannya. Cara Java javacmengkompilasi semuanya dalam sekali jalan, dan apa yang kita sebut "menautkan" benar-benar muncul di nyali JVM saat runtime. Make bukan alat yang tepat untuk pekerjaan itu: Makefile untuk Java pada dasarnya adalah satu atau dua target ( javac, jar).

Semut menambahkan sedikit struktur di atas Make, tetapi tidak secara fundamental mengubah proses.

Setelah beberapa saat, masyarakat mulai menyadari bahwa memburu file jar tidak menyenangkan. Selain itu, tidak ada cara standar untuk menyusun proyek. Tanpa konsistensi, pengembangan Java menjadi berantakan. Maven dirancang untuk mengatasi masalah ini: itu akan membawa struktur proyek umum dan mengotomatiskan pencarian file jar.

Namun, Semut masih sangat berguna. Beberapa proyek lebih cenderung pada sifat proses proses Semut yang bersifat sementara. Beberapa proyek tidak menyusun kode. Beberapa proyek sudah tua dan tidak mungkin ada orang yang akan "meningkatkan" mereka ke Maven.

Ivy datang: ia menambahkan manajemen ketergantungan pada Ant, memberikan proyek yang terbaik dari kedua dunia. Anda dapat menyimpan skrip lawas Anda, atau Anda sangat menyesuaikan lingkungan, tetapi mendapatkan fitur paling penting Maven: manajemen ketergantungan.


sumber