Mvn install o pacchetto Mvn


134

Sono nuovo di Maven, ho un progetto web basato su Java con Maven configurato nel mio MyEclipse.
Ora se ho modificato qualche file java, allora devo fare Run as -> Mvn installo Mvn package?

Risposte:


158

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

package: prende il codice compilato e lo impacchetta nel suo formato distribuibile, come un JAR.

install: installa il pacchetto nel repository locale, per usarlo come dipendenza in altri progetti localmente

Quindi la risposta alla tua domanda è, dipende se la vuoi installata nel tuo repository locale. L'installazione eseguirà anche il pacchetto perché è più in alto nello stack della fase obiettivo.


Ho un progetto in cui sto convertendo il codice della cartella principale e testando il codice della cartella in Jar. Quindi, voglio distribuire questo in Nexus in modo che possa essere utilizzato da altri progetti. Il mio comando deploy è "mvn clean deploy -DskipTests". Posso creare questo pacchetto di comandi piuttosto che installarlo nel repository locale?
MasterJoe,

@ MasterJoe2 "Quindi, voglio distribuire questo in Nexus" Ecco cosa deployfa. Se lo sostituisci con package, non verrà distribuito su Nexus.
walen,

37

mvn installè l'opzione più utilizzata.
mvn packageviene usato raramente, solo se si sta eseguendo il debug di qualche problema con il processo di compilazione di Maven.

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

Si noti che mvn packagecreerà solo un file jar.
mvn installlo farà e installerà i file jar (e di classe ecc.) nelle posizioni appropriate se altro codice dipende da quei barattoli.

Di solito faccio un mvn clean install; questo elimina la targetdirectory e ricrea tutti i barattoli in quella posizione.
Il clean aiuta con cose non necessarie o rimosse che a volte possono interferire.
Invece di eseguire il debug (qualche volta) basta ricominciare tutto il tempo.


27
Non sono d'accordo sul fatto che il pacchetto sia raramente utilizzato su 2 punti. 1) Viene eseguito ogni volta che si esegue l'installazione. 2) Se stai realizzando un .war, allora solo l'esecuzione del pacchetto va bene poiché non hai bisogno di una guerra nel tuo repository locale.
Joshua Wilson,

5
La risposta non spiega perché preferiresti installarlo nel repository locale. A mio avviso, se i progetti sono impostati correttamente, il reattore fornirà le dipendenze tra i moduli. Se i progetti non sono impostati correttamente, l'installazione potrebbe semplicemente nascondere questo fatto e utilizzare artefatti sbagliati. Se hai progetti dipendenti, che devono essere costruiti separatamente per qualche motivo, solo allora vorresti installarli.
Vsevolod Golovanov,

11

Dal riferimento al ciclo di vita , l' installazione eseguirà i test di integrazione del progetto, il pacchetto no.

Se davvero non è necessario installare gli artefatti generati, utilizzare almeno verifica .


5

Inoltre, dovresti notare che se il tuo progetto è composto da più moduli che sono dipendenti l'uno dall'altro, dovresti usare "installa" invece di "pacchetto", altrimenti la tua build fallirà, perché quando usi il comando di installazione, il modulo A verrà impacchettato e distribuito nel repository locale e quindi se il modulo B necessita del modulo A come dipendenza, può accedervi dal repository locale.


4

Se stai non utilizzando un telecomando repository (come Artifactory), utilizzare plain old: mvn clean install

Argomento piuttosto vecchio ma AFAIK, se gestisci il tuo repository (ad esempio: con artefattore) per condividere il vaso tra i tuoi team, potresti voler usare

mvn clean deploy

anziché.

In questo modo, il server di integrazione continua può essere sicuro che tutte le dipendenze siano inserite correttamente nel repository remoto. Se ne hai perso uno, mvn non sarà in grado di trovarlo nel tuo repository m2 CI locale.


1
Penso che stai parlando di mvn clean deploy, non di mvn clean package
Mayjak

2

pacchetto: accetta il codice compilato e lo impacchetta nel suo formato distribuibile, ad esempio un file JAR o WAR. installa - installa il pacchetto nel repository locale, per usarlo come dipendenza in altri progetti localmente


2

Il modo corretto è che mvn packagese hai fatto le cose correttamente per la parte principale della tua build, non dovrebbe essere necessario installare i tuoi pacchetti nel repository locale.

Inoltre, se si utilizza Travis, è possibile "memorizzare nella cache" le proprie dipendenze perché non si toccherà $HOME.m2/repositoryse si utilizza il pacchetto per il proprio progetto.

In pratica, se provi persino a farlo, mvn sitedi solito devi fare mvn installprima. Ci sono troppi bug con uno siteo numerosi plugin mal gestiti.


0

Dipende da cosa stai cercando di ottenere dopo aver modificato il file Java. Fino a quando non vuoi testare il processo maven, non devi mai fare nulla. Eclipse / MyEclipse costruirà ciò che è necessario e posizionerà l'output nella posizione appropriata all'interno del progetto. Puoi anche eseguirlo o distribuirlo (se si tratta di un progetto Web, ad esempio), senza che tu debba esplicitamente fare nulla con Maven. Alla fine, per installare il tuo progetto nel repository maven, dovrai eseguire un'installazione maven. Potresti anche avere altri obiettivi malvagi che desideri eseguire, che MyEclipse non farà automaticamente.

Come ho già detto, dipende da cosa vuoi fare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.