Wie unterscheidet sich "mvn clean install" von "mvn install"?

207

Was ist der Unterschied zwischen mvn clean installund mvn install?

Leonid
quelle

Antworten:

214

cleanist eine eigene Build-Lebenszyklusphase (die als Aktion oder Aufgabe betrachtet werden kann) in Maven. mvn clean installWeist Maven an, die cleanPhase in jedem Modul durchzuführen, bevor die installPhase für jedes Modul ausgeführt wird.

Dadurch werden alle kompilierten Dateien gelöscht, die Sie haben, und es wird sichergestellt, dass Sie jedes Modul wirklich von Grund auf neu kompilieren.

Powerlord
quelle
13
Ich dachte immer, installieren einschließlich sauber als eine seiner Phasen ... bis ich das sehe
Junchen Liu
14
@shanyangqu Leider nein. cleanbefindet sich in einem separaten Lebenszyklus und wird daher nicht standardmäßig aufgerufen.
Powerlord
47

Mit Maven können Sie entweder Ziele oder Lebenszyklusphasen in der Befehlszeile (oder beides) angeben.

cleanund installsind zwei verschiedene Lebenszyklusphasen , an die verschiedene Plugin-Ausführungen gebunden sind (entweder standardmäßig oder explizit in Ihrer pom.xml )

Die cleanPhase soll gemäß Konvention einen Build reproduzierbar machen, dh alles bereinigen, was durch frühere Builds erstellt wurde. In den meisten Fällen geschieht dies durch Aufrufen clean:clean, wodurch das gebundene Verzeichnis gelöscht wird ${project.build.directory}(normalerweise als "Ziel" bezeichnet).

Sean Patrick Floyd
quelle
6
"install" ist kein Lebenszyklus. Es ist eine Phase im Standardlebenszyklus. Obwohl es einen "sauberen" Lebenszyklus gibt, gibt AFAIK dieser Parameter die "saubere" Phase im "sauberen" Lebenszyklus an, nicht den "sauberen" Lebenszyklus selbst.
Puce
1
@Puce wahr, ich meinte "Phase", nicht Lebenszyklus
Sean Patrick Floyd
38

Sie können mit maven mehr als ein Ziel erreichen. mvn clean installruft cleandann zuerst an install. Sie müssen manuell reinigen, da sauber kein Standard ist Ziel Ziel und nicht automatisch auf jedem installieren ausgeführt.

cleanEntfernt den Zielordner - er löscht alle Klassendateien, die Java-Dokumente, die Jars, Berichte und so weiter. Wenn Sie dies nicht tun clean, wird maven nur "das tun, was getan werden muss", als würde es keine Klassen kompilieren, wenn sich die entsprechenden Quelldateien nicht geändert haben (kurz gesagt).

Wir nennen es Ziel in Ameise und Ziel in Maven

Andreas Dolk
quelle
1
Ich denke in diesem Zusammenhang sind Clean and Install Lebenszyklusphasen, keine Ziele.
JL_SO
4

Das Gleiche gilt für @Andreas_D. Wenn Sie außerdem sagen, dass Sie Spring in Ihrem Projekt von einer Version auf eine andere aktualisieren, ohne eine Bereinigung durchzuführen, werden Sie beide in Ihrem Artefakt finden. Bei der Flex-Entwicklung mit Maven bin ich häufig darauf gestoßen.

Mezmo
quelle