Apa perbedaan antara "mvn deploy" ke repo lokal dan "mvn install"?

95

Tim saya menggunakan repo maven tim internal yang dibagikan dari server pengembangan menggunakan Apache. Kami juga menjalankan server Continuum CI pada mesin yang sama. Build Maven di Continuum dijalankan dengan tujuan "instal", yang menyalin artefak terakhir langsung ke direktori bersama.

Pertanyaannya adalah, apa perbedaan antara menambahkan file ke repo bersama menggunakan mvn installdan menggunakan tujuan penerapan (mvn-deploy plugin)?

Tampaknya bagi saya bahwa menggunakan mvn deploymenciptakan kerepotan konfigurasi tambahan, tetapi saya telah membaca di suatu tempat bahwa menginstal file ke repo bersama adalah ide yang buruk karena beberapa alasan terkait dengan cara kerja internal maven.

memperbarui: Saya mendapatkan perbedaan fungsional antara deploydan install; Saya sebenarnya lebih tertarik pada detail tingkat rendah dalam hal file apa yang dibuat di repo maven.

Ken Liu
sumber

Jawaban:

166

Ken, pertanyaan bagus. Saya harus lebih eksplisit dalam Panduan Definitif tentang perbedaannya. "install" dan "deploy" memiliki dua tujuan berbeda dalam sebuah build. "install" mengacu pada proses menginstal artefak di repositori lokal Anda. "menyebarkan" mengacu pada proses penerapan artefak ke repositori jarak jauh.

Contoh:

  1. Ketika saya menjalankan proyek multi-modul besar di komputer saya, saya biasanya akan menjalankan "mvn install". Ini akan menginstal semua artefak perangkat lunak biner yang dihasilkan (biasanya JAR) di repositori lokal saya. Kemudian ketika saya membangun modul individu dalam build, Maven akan mengambil dependensi dari repositori lokal.

  2. Ketika tiba saatnya untuk menyebarkan snapshot atau rilis, saya akan menjalankan "mvn deploy". Menjalankan ini akan mencoba menerapkan file ke repositori atau server jauh. Biasanya saya akan menerapkan ke manajer repositori seperti Nexus

Benar bahwa menjalankan "deploy" akan membutuhkan beberapa konfigurasi tambahan, Anda harus menyediakan bagian distributionManagement di POM Anda.

Tim O'Brien
sumber
@Tim jadi apa sebenarnya keuntungan dari mvn deploy? Manfaat apa yang diberikannya untuk konfigurasi tambahan yang diperlukan sejak awal?
Geek
4
Deploy dirancang untuk menerapkan artefak ke server jarak jauh. Ini adalah kasus penggunaan yang sama sekali berbeda dari pemasangan.
Tim O'Brien
17

Dari docs Maven , suara seperti itu hanya perbedaan di mana repositori Anda menginstal paket ke:

  • install - instal paket ke dalam repositori lokal, untuk digunakan sebagai dependensi dalam proyek lain secara lokal
  • menyebarkan - dilakukan dalam lingkungan integrasi atau rilis, menyalin paket akhir ke repositori jarak jauh untuk dibagikan dengan pengembang dan proyek lain.

Mungkin ada beberapa kebingungan dalam "menginstal" ke server CI, menginstalnya ke repositori lokalnya, yang kemudian Anda sebagai pengguna berbagi?

matt b
sumber
4

"matt b" benar, tetapi untuk lebih spesifik, tujuan "install" menyalin target yang Anda buat ke penyimpanan lokal pada sistem file Anda; berguna untuk perubahan kecil di seluruh proyek yang saat ini tidak dimaksudkan untuk grup penuh.

Sasaran "penerapan" mengunggahnya ke penyimpanan bersama Anda saat pekerjaan Anda selesai, dan kemudian dapat dibagikan oleh orang lain yang membutuhkannya untuk proyek mereka.

Dalam kasus Anda, tampaknya bahwa "install" digunakan untuk membuat pengelolaan penyebaran lebih mudah karena repo lokal CI adalah repo bersama. Jika CI berada di kotak lain, CI harus menggunakan tujuan "penerapan".

Spencer Kormos
sumber