In cosa differiscono “mvn clean package” e “mvn clean install”?


277

Quali sono esattamente le differenze tra mvn clean packagee mvn clean install? Quando eseguo entrambi questi comandi, entrambi sembrano fare la stessa cosa.



3
Uno dei pacchetti (lo costruisce nella destinazione) e sulle installazioni (i pacchetti e lo inserisce nel tuo repository) È necessario eseguire le operazioni successive se si desidera utilizzare questa versione in un altro modulo.
Peter Lawrey,

3
Forse questo dovrebbe essere riaperto? È perfettamente possibile rispondere e non ho trovato difficoltà a rispondere. Inoltre, se qualcuno è nuovo di zecca, è facile vedere come le due fasi sembrano fare la stessa cosa. Lo modificherò nel tentativo di renderlo meno vago.
Daniel Kaplan,

Risposte:


371

Bene, entrambi puliranno. Ciò significa che rimuoveranno la cartella di destinazione. La vera domanda è qual è la differenza tra pacchetto e installazione?

packagecompilerà il codice e lo impacchetterà. Ad esempio, se il tuo pom dice che il progetto è un jar, creerà un jar per te quando lo impacchetterai e lo metterai da qualche parte nella directory di destinazione (per impostazione predefinita).

installcompilerà e impacchetterà, ma inserirà anche il pacchetto nel tuo repository locale. Ciò consentirà ad altri progetti di fare riferimento ad esso e di acquisirlo dal repository locale.

Documentazione


Perché allora mvn si installa più velocemente del pacchetto mvn?
lostintranslation

9
@SharadHolani perché le build sono incrementali. mvn clean installnon è più veloce di mvn package.
OrangeDog,

Per il mio progetto, assemblaggio di pacchetti mvn: single che crea il fat jar richiede più tempo di un'installazione mvn. Imballare e installare entrambi i vasetti grassi equivalenti?
lostintranslation

1
@RakeshYadav sì, lo fa
Daniel Kaplan,

116

Cosa fa clean (comune in entrambi i comandi) - rimuove tutti i file generati dalla build precedente


Venendo alla differenza tra il pacchetto di comandi e l' installazione , devi prima capire il ciclo di vita di un progetto maven


Queste sono le fasi del ciclo di vita predefinite in Maven

  • Convalida : la convalida del progetto è corretta e tutte le informazioni necessarie sono disponibili
  • compile : compila il codice sorgente del progetto
  • test - prova il codice sorgente compilato usando un framework di test unitario adatto. Questi test non dovrebbero richiedere che il codice sia impacchettato o distribuito
  • pacchetto : prende il codice compilato e lo impacchetta nel suo formato distribuibile, come un JAR.
  • verifica : esegue tutti i controlli sui risultati dei test di integrazione per garantire il rispetto dei criteri di qualità
  • installa - installa il pacchetto nel repository locale, per usarlo come dipendenza in altri progetti localmente
  • deploy - fatto nell'ambiente di build, copia il pacchetto finale nel repository remoto per la condivisione con altri sviluppatori e progetti.

Come funziona Maven, se si esegue un comando per una qualsiasi delle fasi del ciclo di vita, esegue ogni fase del ciclo di vita predefinito in ordine, prima di eseguire il comando stesso.

ordine di esecuzione

convalida >> compila >> test (opzionale) >> pacchetto >> verifica >> installa >> distribuisci

Pertanto, quando si esegue il comando mvn package , esegue i comandi per tutte le fasi del ciclo di vita fino al pacchetto

convalida il pacchetto >> compila >> test (opzionale) >>

E per quanto riguarda mvn install , esegue i comandi per tutte le fasi del ciclo di vita fino all'installazione, che include anche il pacchetto

convalida >> compila >> test (opzionale) >> pacchetto >> verifica >> installa


Quindi, effettivamente ciò che significa è, i comandi di installazione fanno tutto ciò che fa il comando pacchetto e altro (installa il pacchetto nel repository locale, per usarlo come dipendenza in altri progetti localmente)

Fonte: riferimento al ciclo di vita di Maven


1
Questo dovrebbe essere contrassegnato come risposta accettata. Questo definisce chiaramente e aiuta l'OP a capire quali sono le diverse fasi del ciclo di vita di Mavn e perché mvn install include il pacchetto mvn ma non viceversa.
Jasmeet Singh,

1
Maven in breve, fantastico!
CodeSlave

19

il pacchetto genererà Jar / war secondo il file POM. install installerà il file jar generato nel repository locale per eventuali altre dipendenze.

la fase di installazione arriva dopo la fase del pacchetto


il primo packaging avverrà, quindi verranno installati quei pacchetti (jar / war).
Abdul Gafoor,

1
"La fase di installazione segue la fase del pacchetto". Il modo in cui è attualmente formulato è al contrario. "Seguito da" significa "dopo".
Charles Wood,

11

Il pacchetto e l'installazione sono varie fasi del ciclo di vita di Maven Build. la fase del pacchetto eseguirà tutte le fasi precedenti e si fermerà con il confezionamento del progetto come un barattolo. Allo stesso modo la fase di installazione eseguirà tutte le fasi precedenti e infine installerà il progetto localmente per altri progetti dipendenti.

Per comprendere il ciclo di vita di Maven Build, visitare il seguente link https://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html


1
Cosa intendi con "e infine installa il progetto localmente per altri progetti dipendenti"
Arun Gowda,

2
@ArunGowda significa che il file .m2 che viene creato nel tuo sistema al momento dell'installazione del Maven verrà aggiunto con i progetti che stai confezionando e sarà disponibile per altri progetti come dipendenza.
JAVA,

un'immagine è di 1000 parole, qualcuno ha un diagramma?

L' installazione di @MrCholo mvn inserirà il jar / war nel repository di Maven. Il luogo in cui vengono memorizzate tutte le dipendenze della tua cucina, di solito ~ / .m2
brt

6

packageaggiungerà il pacchetto jaro waralla tua targetcartella, possiamo controllarlo quando, svuotiamo la cartella di destinazione (usando mvn clean) e quindi eseguiamo mvn package.
installfarà tutto ciò che packagefa, inoltre aggiungerà pacchetti jaro warnel repository locale. Possiamo confermarlo controllando nella tua .m2cartella.

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.