Mvn menginstal atau paket Mvn

134

Saya baru mengenal Maven, saya memiliki proyek web berbasis Java dengan maven yang dikonfigurasi di MyEclipse saya.
Sekarang jika saya memodifikasi file java apa yang harus saya lakukan Run as -> Mvn installatau tidak Mvn package?

pengguna2192023
sumber

Jawaban:

158

dari http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: ambil kode yang dikompilasi dan kemas dalam format yang dapat didistribusikan, seperti JAR.

install: instal paket ke repositori lokal, untuk digunakan sebagai ketergantungan pada proyek lain secara lokal

Jadi jawaban untuk pertanyaan Anda adalah, itu tergantung pada apakah Anda ingin itu diinstal ke dalam repo lokal Anda. Instal juga akan menjalankan paket karena lebih tinggi di tumpukan fase tujuan.

ezcodr
sumber
Saya punya proyek di mana saya mengubah kode folder utama & menguji kode folder ke Jar. Lalu, saya ingin menyebarkan ini ke nexus sehingga bisa digunakan oleh proyek lain. Perintah deploy saya adalah "mvn clean deploy -DskipTests". Bisakah saya membuat paket perintah ini, daripada menginstal ke repo lokal?
MasterJoe
@ MasterJoe2 "Kalau begitu, saya ingin menyebarkan ini ke nexus" Itulah yang deploydilakukannya. Jika Anda menggantinya dengan package, itu tidak akan digunakan untuk Nexus.
walen
37

mvn installadalah opsi yang paling sering digunakan.
mvn packagejarang digunakan, hanya jika Anda men-debug beberapa masalah dengan proses pembuatan pakar.

Lihat: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Perhatikan bahwa mvn packagehanya akan membuat file jar.
mvn installakan melakukan itu dan menginstal file toples (dan kelas dll) di tempat yang tepat jika kode lain tergantung pada guci tersebut.

Saya biasanya melakukan mvn clean install; ini menghapus targetdirektori dan membuat ulang semua stoples di lokasi itu.
Bersih membantu dengan hal-hal yang tidak dibutuhkan atau dihapus yang kadang-kadang bisa menghalangi.
Alih-alih men-debug (beberapa waktu) baru mulai segar sepanjang waktu.

Johan
sumber
27
Saya tidak setuju bahwa paket jarang digunakan pada 2 poin. 1) Itu dijalankan setiap kali Anda menjalankan instal. 2) Jika Anda membuat perang. Maka hanya menjalankan paket baik-baik saja karena Anda tidak perlu perang di repo lokal Anda.
Joshua Wilson
5
Jawabannya tidak menjelaskan, mengapa Anda lebih suka menginstal ke repositori lokal. Dalam pemahaman saya, jika proyek diatur dengan benar, maka reaktor akan menyediakan dependensi antar modul. Jika proyek tidak diatur dengan benar, maka pemasangan bisa menyembunyikan fakta ini dan menggunakan artefak yang salah. Jika Anda memiliki proyek dependen, itu harus dibangun secara terpisah untuk beberapa alasan, hanya kemudian Anda ingin menginstal.
Vsevolod Golovanov
11

Dari referensi Siklus Hidup , instalasi akan menjalankan tes integrasi proyek, paket tidak akan.

Jika Anda benar-benar tidak perlu menginstal artefak yang dihasilkan, gunakan setidaknya verifikasi .

dna
sumber
5

Anda juga harus mencatat bahwa jika proyek Anda terdiri dari beberapa modul yang saling bergantung satu sama lain, Anda harus menggunakan "install" daripada "package", jika tidak build Anda akan gagal, karena ketika Anda menggunakan perintah install, modul A akan dikemas dan dikerahkan ke repositori lokal dan kemudian jika modul B membutuhkan modul A sebagai dependensi, ia dapat mengaksesnya dari repositori lokal.

Mr.Q
sumber
4

Jika Anda tidak menggunakan repositori jarak jauh (seperti artifactory), gunakan yang lama: mvn clean install

Topik yang lumayan tua tapi AFAIK, jika Anda menjalankan repositori Anda sendiri (mis: dengan artifactory) untuk berbagi tabung di antara tim Anda, Anda mungkin ingin menggunakan

mvn clean deploy

sebagai gantinya.

Dengan cara ini, server integrasi berkelanjutan Anda dapat memastikan bahwa semua dependensi dimasukkan dengan benar ke repositori jarak jauh Anda. Jika Anda melewatkan satu, mvn tidak akan dapat menemukannya di repositori CI local m2 Anda.

pengguna1853859
sumber
1
Saya pikir Anda berbicara tentang mvn clean deploy, bukan mvn clean package
Mayjak
2

package - mengambil kode yang dikompilasi dan mengemasnya dalam format yang dapat didistribusikan, seperti file JAR atau WAR. instal - instal paket ke dalam repositori lokal, untuk digunakan sebagai ketergantungan pada proyek lain secara lokal

Elilmatha Sivanesan
sumber
2

Cara yang tepat adalah mvn packagejika Anda melakukan hal-hal dengan benar untuk bagian inti dari build Anda maka seharusnya tidak perlu menginstal paket Anda di repositori lokal.

Selain itu jika Anda menggunakan Travis Anda dapat "cache" dependensi Anda karena itu tidak akan menyentuh Anda $HOME.m2/repositoryjika Anda menggunakan paket untuk proyek Anda sendiri.

Dalam kepraktisan jika Anda bahkan berusaha melakukan hal mvn siteyang biasanya perlu Anda lakukan mvn installsebelumnya. Ada terlalu banyak bug dengan salah satu siteatau banyak plugin yang tidak terawat.

Archimedes Trajano
sumber
0

Itu tergantung pada apa yang ingin Anda capai setelah mengubah file Java. Sampai Anda ingin menguji proses pakar, Anda tidak perlu melakukan apa pun. Eclipse / MyEclipse akan membangun apa yang diperlukan dan menempatkan output di tempat yang sesuai dalam proyek Anda. Anda juga dapat menjalankan atau menyebarkannya (jika itu proyek web, misalnya), tanpa perlu melakukan apa pun secara eksplisit dengan pakar. Pada akhirnya, untuk menginstal proyek Anda di repositori maven, Anda harus melakukan instalasi maven. Anda juga dapat memiliki sasaran pakar lain yang ingin Anda jalankan, yang MyEclipse tidak akan lakukan secara otomatis.

Seperti yang saya katakan, itu tergantung pada apa yang ingin Anda lakukan.

Tony Weddle
sumber