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.
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.
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.
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).
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.
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.
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 .
package
undinstall
.Antworten:
Nun, beide werden sauber. Das heißt, sie entfernen den Zielordner. Die eigentliche Frage ist, was ist der Unterschied zwischen Paket und Installation?
package
kompiliert 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).install
wird 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
quelle
mvn clean install
ist nicht schneller alsmvn package
.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
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
Wenn Sie also den Befehl mvn package ausführen, werden die Befehle für alle Lebenszyklusphasen bis package ausgeführt
Bei der mvn-Installation werden die Befehle für alle Lebenszyklusphasen bis zur Installation ausgeführt, einschließlich des Pakets
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
quelle
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
quelle
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
quelle
package
wird gepacktjar
oderwar
zu Ihremtarget
Ordner hinzugefügt. Wir können es überprüfen, wenn wir den Zielordner (mitmvn clean
) leeren und dann ausführenmvn package
.install
wird alle Dinge tun, die tunpackage
, zusätzlich wird es gepacktjar
oder auchwar
im lokalen Repository hinzufügen . Wir können dies bestätigen, indem wir Ihren.m2
Ordner einchecken .quelle