Bagaimana perbedaan "paket mvn clean" dan "mvn clean install"?


277

Apa sebenarnya perbedaan antara mvn clean packagedan mvn clean install? Ketika saya menjalankan kedua perintah ini, mereka berdua sepertinya melakukan hal yang sama.


12
Silakan lihat Pengantar Membangun Siklus Hidup - Referensi Siklus Hidup dan mencari packagedan install.
Charlee Chitsuk

3
Satu paket (membangunnya di target) dan pada pemasangan (paket dan menempatkannya di repositori Anda) Anda harus melakukannya nanti jika Anda ingin menggunakan versi ini di modul lain.
Peter Lawrey

3
Mungkin ini harus dibuka kembali? Sangat mungkin untuk menjawab dan saya tidak merasa sulit untuk menjawab. Juga, jika seseorang baru mengenal pakar sihir, mudah untuk melihat bagaimana kedua fase tersebut melakukan hal yang sama. Saya akan mengeditnya dalam upaya untuk membuatnya kurang kabur.
Daniel Kaplan

Jawaban:


371

Nah, keduanya akan bersih. Itu berarti mereka akan menghapus folder target. Pertanyaan sebenarnya adalah apa perbedaan antara paket dan instalasi?

packageakan mengkompilasi kode Anda dan juga mengemasnya. Misalnya, jika pom Anda mengatakan proyek tersebut adalah sebuah toples, itu akan membuat sebuah toples untuk Anda ketika Anda mengemasnya dan meletakkannya di suatu tempat di direktori target (secara default).

installakan mengkompilasi dan mengemas, tetapi juga akan menempatkan paket di repositori lokal Anda. Ini akan membuatnya sehingga proyek lain dapat merujuknya dan mengambilnya dari repositori lokal Anda.

Dokumentasi


Mengapa mvn menginstal lebih cepat daripada paket mvn?
lostintranslation

9
@SharadHolani karena build bersifat incremental. mvn clean installtidak lebih cepat dari mvn package.
OrangeDog

Untuk proyek saya, perakitan paket mvn: tunggal yang membangun tabung lemak membutuhkan waktu lebih lama daripada pemasangan mvn. Apakah paket dan instal keduanya membangun guci yang setara lemak?
Lostintranslation

1
@RakeshYadav ya itu
Daniel Kaplan

116

Apa yang bersih lakukan (umum di kedua perintah) - menghapus semua file yang dihasilkan oleh build sebelumnya


Datang ke perbedaan antara paket perintah dan instal , Anda harus terlebih dahulu memahami siklus proyek maven


Ini adalah fase siklus hidup default di pakar

  • memvalidasi - memvalidasi proyek sudah benar dan semua informasi yang diperlukan tersedia
  • kompilasi - kompilasi kode sumber proyek
  • uji - uji kode sumber yang dikompilasi menggunakan kerangka pengujian unit yang sesuai. Tes-tes ini seharusnya tidak mengharuskan kode dikemas atau digunakan
  • package - ambil kode yang dikompilasi dan kemas dalam format yang dapat didistribusikan, seperti JAR.
  • memverifikasi - jalankan pemeriksaan apa pun pada hasil uji integrasi untuk memastikan kriteria kualitas terpenuhi
  • instal - instal paket ke dalam repositori lokal, untuk digunakan sebagai ketergantungan pada proyek lain secara lokal
  • menyebarkan - dilakukan di lingkungan build, menyalin paket akhir ke repositori jarak jauh untuk berbagi dengan pengembang dan proyek lain.

Cara kerja Maven adalah, jika Anda menjalankan perintah untuk salah satu fase siklus hidup, itu mengeksekusi setiap fase siklus hidup default secara berurutan, sebelum mengeksekusi perintah itu sendiri.

urutan eksekusi

validasikan >> kompilasi >> tes (opsional) >> paket >> verifikasi >> instal >> deploy

Jadi ketika Anda menjalankan paket perintah mvn , ia menjalankan perintah untuk semua fase siklus hidup hingga paket

validasi >> compile >> test (opsional) >> paket

Dan untuk mvn install , ia menjalankan perintah untuk semua fase siklus hidup hingga menginstal, yang mencakup paket juga

validasi >> kompilasi >> tes (opsional) >> paket >> verifikasi >> instal


Jadi, secara efektif artinya, instal perintah melakukan semua yang dilakukan perintah paket dan lainnya (instal paket ke repositori lokal, untuk digunakan sebagai ketergantungan pada proyek lain secara lokal)

Sumber: Referensi siklus hidup Maven


1
Ini harus ditandai sebagai jawaban yang diterima. Ini jelas mendefinisikan dan membantu OP untuk memahami apa fase yang berbeda dari siklus hidup maven dan mengapa mvn install termasuk paket mvn tetapi tidak sebaliknya.
Jasmeet Singh

1
Singkatnya, hebat!
CodeSlave

19

paket akan menghasilkan Jar / perang sesuai file POM. instal akan menginstal file jar yang dihasilkan ke repositori lokal untuk dependensi lain jika ada.

Installfase muncul setelah fase paket


kemasan pertama akan terjadi kemudian paket-paket (jar / perang) akan menginstal.
Abdul Gafoor

1
+ Msgstr "Fase pemasangan mengikuti fase paket". Cara saat ini diutarakan mundur. "Diikuti oleh" berarti "setelah".
Charles Wood

11

Paket & instal adalah berbagai fase dalam siklus hidup maven build. fase paket akan menjalankan semua fase sebelum itu & itu akan berhenti dengan mengemas proyek sebagai toples. Demikian pula fase instal akan mengeksekusi semua fase sebelumnya & akhirnya menginstal proyek secara lokal untuk proyek dependen lainnya.

Untuk memahami siklus pengembangan maven, harap kunjungi tautan berikut https://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html


1
Apa yang Anda maksud dengan "& akhirnya menginstal proyek secara lokal untuk proyek dependen lainnya"
Arun Gowda

2
@ArunGowda artinya dalam .m2 yang dibuat di sistem Anda setelah menginstal maven akan ditambahkan dengan proyek yang Anda bungkus dan akan tersedia untuk proyek lain sebagai ketergantungan.
JAVA

gambar adalah 1000 kata, ada yang punya diagram?

@MrCholo mvn install akan memasukkan toples / war ke dalam repo pakar Anda. Tempat di mana semua dependensi pakar Anda disimpan, biasanya ~ / .m2
brt

6

packageakan menambahkan paket jaratau warke targetfolder Anda , Kami dapat memeriksa kapan, kami mengosongkan folder target (menggunakan mvn clean) dan kemudian jalankan mvn package.
installakan melakukan semua hal yang packagedilakukan, selain itu akan menambah paket jaratau wardalam repositori lokal juga. Kami dapat mengonfirmasinya dengan memeriksa di .m2folder Anda .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.