Wie unterscheiden sich "mvn clean package" und "mvn clean install"?

277

Was genau sind die Unterschiede zwischen mvn clean packageund mvn clean install? Wenn ich diese beiden Befehle ausführe, scheinen beide dasselbe zu tun.

Ben
quelle
12
Schauen Sie sich die Einführung in den Build Lifecycle - Lifecycle Reference an und suchen Sie nach packageund install.
Charlee Chitsuk
3
Ein Paket (erstellt es im Ziel) und bei Installationen (Pakete und platziert es in Ihrem Repository) Sie müssen dies später tun, wenn Sie diese Version in einem anderen Modul verwenden möchten.
Peter Lawrey
3
Vielleicht sollte dies wieder geöffnet werden? Es ist durchaus möglich zu antworten und ich fand es nicht schwierig zu antworten. Wenn jemand ganz neu bei Maven ist, ist es leicht zu erkennen, wie die beiden Phasen anscheinend dasselbe bewirken. Ich werde es bearbeiten, um es weniger vage zu machen.
Daniel Kaplan

Antworten:

370

Nun, beide werden sauber. Das heißt, sie entfernen den Zielordner. Die eigentliche Frage ist, was ist der Unterschied zwischen Paket und Installation?

packagekompiliert Ihren Code und verpackt ihn auch. Wenn Ihr POM beispielsweise angibt, dass das Projekt ein JAR ist, erstellt es ein JAR für Sie, wenn Sie es verpacken und irgendwo im Zielverzeichnis ablegen (standardmäßig).

installwird kompiliert und verpackt, aber es wird auch das Paket in Ihrem lokalen Repository ablegen. Dadurch können andere Projekte darauf verweisen und es aus Ihrem lokalen Repository abrufen.

Dokumentation

Daniel Kaplan
quelle
Warum ist mvn dann schneller zu installieren als mvn package?
Verlorene Übersetzung
9
@ SharadHolani, weil Builds inkrementell sind. mvn clean installist nicht schneller als mvn package.
OrangeDog
Für mein Projekt dauert die mvn-Paketassemblierung: single, die das Fat Jar erstellt, länger als eine mvn-Installation. Packen und installieren Sie beide gleichwertige Fettgläser?
Lostintranslation
1
@ RakeshYadav ja, das tut es
Daniel Kaplan
115

Was clean macht (gemeinsam in beiden Befehlen) - entfernt alle Dateien, die vom vorherigen Build generiert wurden


Kommend auf die Differenz zwischen den Befehlen verpacken und installieren , müssen Sie zunächst das verstehen Lebenszyklus eines Maven - Projekt


Dies sind die Standardlebenszyklusphasen in maven

  • validieren - validieren Sie, dass das Projekt korrekt ist und alle erforderlichen Informationen verfügbar sind
  • compile - Kompiliert den Quellcode des Projekts
  • test - Testen Sie den kompilierten Quellcode mit einem geeigneten Unit-Test-Framework. Für diese Tests sollte nicht erforderlich sein, dass der Code gepackt oder bereitgestellt wird
  • package - Nehmen Sie den kompilierten Code und verpacken Sie ihn in seinem verteilbaren Format, z. B. einer JAR.
  • überprüfen - Überprüfen Sie die Ergebnisse der Integrationstests, um sicherzustellen, dass die Qualitätskriterien erfüllt sind
  • install - Installieren Sie das Paket im lokalen Repository, um es als Abhängigkeit in anderen Projekten lokal zu verwenden
  • Bereitstellen - Wird in der Build-Umgebung ausgeführt und kopiert das endgültige Paket in das Remote-Repository, um es für andere Entwickler und Projekte freizugeben.

Wenn Sie einen Befehl für eine der Lebenszyklusphasen ausführen, führt Maven jede Standardlebenszyklusphase der Reihe nach aus, bevor Sie den Befehl selbst ausführen.

Reihenfolge der Ausführung

validieren >> kompilieren >> testen (optional) >> paket >> verifizieren >> installieren >> bereitstellen

Wenn Sie also den Befehl mvn package ausführen, werden die Befehle für alle Lebenszyklusphasen bis package ausgeführt

validieren >> kompilieren >> testen (optional) >> Paket

Bei der mvn-Installation werden die Befehle für alle Lebenszyklusphasen bis zur Installation ausgeführt, einschließlich des Pakets

validieren >> kompilieren >> testen (optional) >> paket >> verifizieren >> installieren


Effektiv bedeutet dies, dass Installationsbefehle alles tun, was das Paket beinhaltet tun, und noch mehr (Installieren Sie das Paket im lokalen Repository, um es als Abhängigkeit in anderen Projekten lokal zu verwenden).

Quelle: Maven-Lebenszyklusreferenz

Ketan R.
quelle
1
Dies sollte als akzeptierte Antwort markiert werden. Dies definiert und hilft dem OP klar zu verstehen, was die verschiedenen Phasen des Maven-Lebenszyklus sind und warum die mvn-Installation das mvn-Paket enthält, aber nicht umgekehrt.
Jasmeet Singh
1
Maven auf den Punkt gebracht, großartig!
CodeSlave
19

Das Paket generiert Jar / War gemäß POM-Datei. install installiert die generierte JAR-Datei im lokalen Repository für andere Abhängigkeiten, falls vorhanden.

installieren Phase kommt nach Paket Phase

Abdul Gafoor
quelle
Zuerst wird verpackt, dann werden diese Pakete (jar / war) installiert.
Abdul Gafoor
1
"Installationsphase folgt Paketphase". Die Art und Weise, wie es derzeit formuliert ist, ist rückwärts. "Gefolgt von" bedeutet "nach".
Charles Wood
11

Paket & Installation sind verschiedene Phasen im Maven-Build-Lebenszyklus. Die Paketphase führt alle vorherigen Phasen aus und endet mit dem Verpacken des Projekts als Glas. In ähnlicher Weise führt die Installationsphase alle vorherigen Phasen aus und installiert das Projekt schließlich lokal für andere abhängige Projekte.

Um den Lebenszyklus eines Maven-Builds zu verstehen, klicken Sie bitte auf den folgenden Link: https://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html

Aarish Ramesh
quelle
1
Was meinst du mit "& endlich das Projekt lokal für andere abhängige Projekte installieren"
Arun Gowda
2
@ArunGowda bedeutet, dass in der .m2, die bei der Installation des Maven in Ihrem System erstellt wird, Projekte hinzugefügt werden, die Sie verpacken, und für andere Projekte als Abhängigkeit verfügbar sind.
JAVA
Ein Bild besteht aus 1000 Wörtern. Hat jemand ein Diagramm?
@MrCholo mvn install bringt das jar / war in dein maven repo. Der Ort, an dem alle Ihre Maven-Abhängigkeiten gespeichert werden, normalerweise ~ / .m2
brt
6

packagewird gepackt jaroder warzu Ihrem targetOrdner hinzugefügt. Wir können es überprüfen, wenn wir den Zielordner (mit mvn clean) leeren und dann ausführen mvn package.
installwird alle Dinge tun, die tun package, zusätzlich wird es gepackt jaroder auch warim lokalen Repository hinzufügen . Wir können dies bestätigen, indem wir Ihren .m2Ordner einchecken .

Nisarg Patil
quelle