Ziele werden in Phasen ausgeführt, die dabei helfen, die Reihenfolge zu bestimmen, in der Ziele ausgeführt werden. Das beste Verständnis hierfür besteht darin, die Standard-Maven-Lebenszyklusbindungen zu betrachten, aus denen hervorgeht, welche Ziele standardmäßig in welchen Phasen ausgeführt werden. Die Ziele der Kompilierungsphase werden immer vor den Zielen der Testphase ausgeführt, die immer vor den Zielen der Paketphase usw. ausgeführt werden.
Ein Teil der Verwirrung wird durch die Tatsache verschärft, dass Sie beim Ausführen von Maven ein Ziel oder eine Phase angeben können. Wenn Sie eine Phase angeben, führt maven alle Phasen bis zu der von Ihnen angegebenen Phase aus (z. B. wenn Sie ein Paket angeben, durchläuft es zuerst die Kompilierungsphase und dann die Testphase und schließlich die Paketphase) und für jede Phase Führen Sie alle mit dieser Phase verbundenen Ziele aus.
Wenn Sie eine Plugin-Ausführung in Ihrer Maven-Build-Datei erstellen und nur das Ziel angeben, wird dieses Ziel an eine bestimmte Standardphase gebunden. Beispielsweise wird das Ziel jaxb: xjc standardmäßig an die Phase "Ressourcen generieren" gebunden. Wenn Sie jedoch die Ausführung angeben, können Sie auch die Phase für dieses Ziel explizit angeben.
Wenn Sie bei der Ausführung von Maven ein Ziel angeben, wird dieses Ziel und nur dieses Ziel ausgeführt. Mit anderen Worten, wenn Sie das jar: jar-Ziel angeben, wird nur das jar: jar-Ziel ausgeführt, um Ihren Code in ein jar zu packen. Wenn Sie das Kompilierungsziel zuvor noch nicht ausgeführt oder Ihren kompilierten Code auf andere Weise vorbereitet haben, kann dies sehr wahrscheinlich fehlschlagen.
Ich habe es sich zur Gewohnheit gemacht , zu sagen „Maven geht alle Phasen (bis zu und einschließlich der gegebenen)“ anstelle von „läuft“ oder „ausführt“ (letzteres , wie es in Maven genannt Einführung in Build Lifecycle ). Eine solche Unterscheidung macht es klarer vom Code des Ziels, der wirklich ausgeführt wird. Aber das könnte persönlicher Geschmack sein.
GeroldBroser setzt Monica am
Wir können aber auch Ziele ausführen, die keiner Phase angehören, dh mvn archetype:generateund in diesem Fall führt maven nur das Ziel aus?
Quazi Irfan
1
@Pace Haben Sie eine Referenz für den letzten Absatz? Ich habe das bezweifelt und es mit einem einfachen Projekt hier versucht: mvn testläuft : --- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:test, während mvn compiler:testCompilenur läuft --- maven-compiler-plugin:3.1:testCompile ....
GeroldBroser stellt Monica
4
@Pace mvn clean compiler:testCompileLäufe , --- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompiledie mit fehlschlägt Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhase(wo MvnPhasewird die Klasse im Test in der Testklasse verwiesen). Anscheinend werden Phasen nicht aufgerufen, wenn ein Ziel explizit aufgerufen wird.
GeroldBroser stellt Monica
1
Basierend auf den Eingaben von geroldbroser und @ kekko12 habe ich den letzten Absatz aktualisiert, um anzugeben, dass bei Angabe eines Ziels nur dieses Ziel ausgeführt wird und nicht alle vorhergehenden Phasen.
Pace
188
Der Lebenszyklus ist eine Folge benannter Phasen .
Phasen werden nacheinander ausgeführt. Das Ausführen einer Phase bedeutet, dass alle vorherigen Phasen ausgeführt werden.
Plugin ist eine Sammlung von Zielen, die auch als MOJO ( M aven O ld J ava O bject) bezeichnet werden.
Analogie: Plugin ist eine Klasse und Ziele sind Methoden innerhalb der Klasse.
Maven basiert auf dem zentralen Konzept eines Build Life Cycles . In jedem Build-Lebenszyklus gibt es Build-Phasen und in jeder Build-Phase gibt es Build-Ziele .
Wir können entweder eine Build-Phase oder ein Build-Ziel ausführen. Bei der Ausführung einer Build-Phase führen wir alle Build-Ziele innerhalb dieser Build-Phase aus. Build-Ziele werden einer oder mehreren Build-Phasen zugewiesen. Wir können ein Build-Ziel auch direkt ausführen.
Es gibt drei wichtige integrierte Build-Lebenszyklen :
Beispielsweise defaultumfasst der Lebenszyklus die folgenden Erstellungsphasen :
◾validate - validate the project is correct and all necessary information is available
◾compile - compile the source code of the project
◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
◾package - take the compiled code and package it in its distributable format, such as a JAR.
◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
◾verify - run any checks to verify the package is valid and meets quality criteria
◾install - install the package into the local repository, for use as a dependency in other projects locally
◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
Um die obigen Phasen zu durchlaufen, müssen wir nur einen Befehl aufrufen:
mvn <phase> { Ex: mvn install }
Für den obigen Befehl werden ab der ersten Phase alle Phasen nacheinander bis zur Installationsphase ausgeführt. mvnkann entweder ein Ziel oder eine Phase (oder sogar mehrere Ziele oder mehrere Phasen) wie folgt ausführen:
mvn clean install plugin:goal
Wenn Sie jedoch das Präfix anpassen möchten, das zum Verweisen auf Ihr Plugin verwendet wird, können Sie das Präfix direkt über einen Konfigurationsparameter maven-plugin-pluginim POM Ihres Plugins angeben .
Die meisten Funktionen von Maven sind Plugins. Ein Plugin bietet eine Reihe von Zielen , die mit der folgenden Syntax ausgeführt werden können:
mvn [plugin-name]:[goal-name]
Beispielsweise kann ein Java-Projekt durch Ausführen mit dem Kompilierungsziel des Compiler-Plugins kompiliert werden mvn compiler:compile.
Der Build-Lebenszyklus ist eine Liste benannter Phasen, mit denen die Zielausführung angeordnet werden kann.
Von Plugins bereitgestellte Ziele können verschiedenen Phasen des Lebenszyklus zugeordnet werden. Beispielsweise ist das Ziel standardmäßig compiler:compileder compilePhase zugeordnet , während das Zielsurefire:test der testPhase zugeordnet ist . Betrachten Sie den folgenden Befehl:
mvn test
Wenn der vorhergehende Befehl ausgeführt wird, führt Maven alle Ziele aus, die jeder der Phasen bis einschließlich der testPhase zugeordnet sind. In einem solchen Fall führt Maven dann das resources:resourcesmit der process-resourcesPhase verknüpfte Ziel aus compiler:compileund so weiter, bis es schließlich das surefire:testZiel ausführt.
Obwohl eine Build-Phase für einen bestimmten Schritt im Build-Lebenszyklus verantwortlich ist, kann die Art und Weise, in der diese Verantwortlichkeiten ausgeführt werden, variieren. Dazu werden die Plugin-Ziele deklariert, die an diese Erstellungsphasen gebunden sind.
Ein Plugin-Ziel stellt eine bestimmte Aufgabe dar (feiner als eine Erstellungsphase), die zum Erstellen und Verwalten eines Projekts beiträgt. Es kann an null oder mehr Erstellungsphasen gebunden sein. Ein Ziel, das nicht an eine Build-Phase gebunden ist, kann außerhalb des Build-Lebenszyklus durch direkten Aufruf ausgeführt werden. Die Reihenfolge der Ausführung hängt von der Reihenfolge ab, in der die Ziele und die Erstellungsphase (n) aufgerufen werden. Betrachten Sie beispielsweise den folgenden Befehl. Die cleanund packageArgumente sind Erstellungsphasen, während das dependency:copy-dependenciesein Ziel (eines Plugins) ist.
mvn clean dependency:copy-dependencies package
Wenn dies ausgeführt wird, wird zuerst die cleanPhase ausgeführt (dh alle vorhergehenden Phasen des sauberen Lebenszyklus sowie die cleanPhase selbst werden ausgeführt) und dann das dependency:copy-dependenciesZiel, bevor die endgültige Ausführung ausgeführt wirdpackage Phase (und alle vorhergehenden Erstellungsphasen von) der Standardlebenszyklus).
Wenn ein Ziel an eine oder mehrere Erstellungsphasen gebunden ist, wird dieses Ziel in allen diesen Phasen aufgerufen.
Darüber hinaus können an eine Build-Phase null oder mehr Ziele gebunden sein. Wenn an eine Erstellungsphase keine Ziele gebunden sind, wird diese Erstellungsphase nicht ausgeführt. Wenn jedoch ein oder mehrere Ziele daran gebunden sind, werden alle diese Ziele ausgeführt.
Eingebaute Lebenszyklusbindungen
einigen Phasen sind standardmäßig Ziele gebunden. Für den Standardlebenszyklus hängen diese Bindungen vom Verpackungswert ab.
Wenn ich 2 Profile habe, kann ich zuerst alle Plugins von Profil 1 und dann das von Profil 2 ausführen?
Bee
[plugin-name]im Beispiel mvn [plugin-name]:[goal-name]ist eher ein Plugin-Präfix . mvn clean installkann nicht nur " in einem Szenario mit mehreren Modulen verwendet werden ". Multi-Modul ist ein ganz anderes Thema.
GeroldBroser stellt Monica
Halten sich Ziele, die mit derselben Phase verbunden sind, an eine Reihenfolge?
Aal Gheez
5
Der größte Teil dieses Textes wurde wörtlich aus der Maven-Dokumentation kopiert . Dies sollte klar angegeben werden!
Lii
tolle Quelle!
Bobo
45
Die gewählte Antwort ist großartig, aber ich möchte dem Thema dennoch etwas Kleines hinzufügen. Eine Illustration.
Es zeigt deutlich, wie die verschiedenen Phasen an verschiedene Plugins gebunden sind und welche Ziele diese Plugins setzen.
Lassen Sie uns einen Fall untersuchen, in dem Folgendes ausgeführt wird mvn compile:
Es ist eine Phase , die den Compiler ausführen Plugin mit der Kompilierung Ziel
Das Compiler-Plugin hat unterschiedliche Ziele. Denn mvn compilees ist einem bestimmten Ziel zugeordnet, dem Kompilierungsziel.
Es ist das gleiche wie Laufen mvn compiler:compile
Warum mvn testzeigt auf packageund mvn installzeigt auf deploy?
Abdull
2
Sieht aus wie ein Illustrationsfehler, danke, dass Sie es bemerkt haben (im Web gegründet).
Johnny
3
Woher hast du die Illustration? Haben Sie das Urheberrecht und die Nutzungsbedingungen überprüft?
Abdull
1
@Abdulles Bild von hier aufgenommen carminespagnuolo.eu/otheractivities/tutorato/PR-2014-2015/… (und es erscheint auch auf vielen anderen Webseiten), das der Antwort hinzugefügt wird. Vielen Dank, dass Sie diesen Punkt angesprochen haben. Ich war mir der Bedeutung nicht bewusst.
Johnny
1
Die Zeiger von Phasen zu Plugins im Diagramm sind auch nicht ganz richtig, das jarPlugin läuft tatsächlich in der packagePhase. Und der Pom im Sandwich zwischen Phasen und Plugins ist etwas verwirrend (ich nehme an, es sollte bedeuten, dass Sie im Pom zusätzlich zu den Standardbindungen konfigurieren können, welche Plugins in welchen Phasen ausgeführt werden). Das allgemeine Prinzip ist jedoch richtig.
Maven definiert 4 Elemente eines Erstellungsprozesses:
Lebenszyklus
Drei eingebaute in Lifecycles (aka Build Lifecycles ): default, clean, site. ( Lebenszyklusreferenz )
Phase
Jeder Lebenszyklus besteht aus aus Phasen , zB für den defaultLebenszyklus: compile, test, package, install, usw.
Plugin
Ein Artefakt, das ein oder mehrere Ziele bietet.
Basierend auf Verpackungsart ( jar, warusw.) Plugins' Ziele sind Phasen standardmäßig gebunden. ( Eingebaute Lebenszyklusbindungen )
Tor
Die Aufgabe (Aktion), die ausgeführt wird. Ein Plugin kann ein oder mehrere Ziele haben.
Bei der Konfiguration eines Plugins in einem POM müssen ein oder mehrere Ziele angegeben werden . Falls für ein Plugin keine Standardphase definiert ist, können die angegebenen Ziele an eine Phase gebunden werden.
Nur Lebenszyklusphasen sind wirklich sinnvoll, um als "Schritte" (eines Erstellungsprozesses) betrachtet zu werden. Ich würde es lieber 4 Entitäten / Gegenstände / Dinge nennen .
GeroldBroser setzt Monica am
Wenn ich die Welt sehe Build Phase , sehe ich sie als eine weitere Phase in einem Lebenszyklus, und das verwirrt mich.
Quazi Irfan
26
Ich glaube , eine gute Antwort ist bereits vorgesehen, aber ich möchte ein easy-to-follow Diagramm der verschiedenen 3 - Lebenszyklen hinzuzufügen ( build, clean, und site) und die Phasen in jedem.
Die fettgedruckten Phasen sind die üblicherweise verwendeten Hauptphasen.
Kurz gesagt, Sie sollten nicht versuchen, alle drei gleichzeitig zu verstehen. Zuerst sollten Sie die Beziehung in diesen Gruppen verstehen:
Lebenszyklus gegen Phase
Plugin gegen Ziel
1. Lebenszyklus gegen Phase
Der Lebenszyklus ist eine Sammlung von Phasen nacheinander, siehe hier Lebenszyklusreferenzen . Wenn Sie eine Phase aufrufen , werden auch alle Phasen aufgerufen davor .
Zum Beispiel hat der saubere Lebenszyklus 3 Phasen ( Vorreinigung, Reinigung, Nachreinigung ).
mvn clean
Es wird Vorreinigung und Reinigung genannt .
2. Plugin gegen Ziel
Ziel ist wie eine Aktion im Plugin . Wenn das Plugin eine Klasse ist, ist das Ziel eine Methode.
Sie können ein Ziel wie folgt nennen:
mvn clean:clean
Dies bedeutet "Aufruf des sauberen Ziels im sauberen Plugin" (Hier bezieht sich nichts auf die saubere Phase. Lassen Sie sich nicht vom Wort "sauber" verwirren, sie sind nicht dasselbe!)
3. Nun die Beziehung zwischen Phase & Ziel:
Phase kann (vor) Links zu Tor (e) .Für Beispiel, in der Regel, die saubere Phase Anschluss an das sauberen Ziel. Wenn Sie diesen Befehl aufrufen:
mvn clean
Es wird die Vorreinigungsphase und die Reinigungsphase genannt, die mit dem Ziel "sauber: sauber" verbunden sind.
Antworten:
Ziele werden in Phasen ausgeführt, die dabei helfen, die Reihenfolge zu bestimmen, in der Ziele ausgeführt werden. Das beste Verständnis hierfür besteht darin, die Standard-Maven-Lebenszyklusbindungen zu betrachten, aus denen hervorgeht, welche Ziele standardmäßig in welchen Phasen ausgeführt werden. Die Ziele der Kompilierungsphase werden immer vor den Zielen der Testphase ausgeführt, die immer vor den Zielen der Paketphase usw. ausgeführt werden.
Ein Teil der Verwirrung wird durch die Tatsache verschärft, dass Sie beim Ausführen von Maven ein Ziel oder eine Phase angeben können. Wenn Sie eine Phase angeben, führt maven alle Phasen bis zu der von Ihnen angegebenen Phase aus (z. B. wenn Sie ein Paket angeben, durchläuft es zuerst die Kompilierungsphase und dann die Testphase und schließlich die Paketphase) und für jede Phase Führen Sie alle mit dieser Phase verbundenen Ziele aus.
Wenn Sie eine Plugin-Ausführung in Ihrer Maven-Build-Datei erstellen und nur das Ziel angeben, wird dieses Ziel an eine bestimmte Standardphase gebunden. Beispielsweise wird das Ziel jaxb: xjc standardmäßig an die Phase "Ressourcen generieren" gebunden. Wenn Sie jedoch die Ausführung angeben, können Sie auch die Phase für dieses Ziel explizit angeben.
Wenn Sie bei der Ausführung von Maven ein Ziel angeben, wird dieses Ziel und nur dieses Ziel ausgeführt. Mit anderen Worten, wenn Sie das jar: jar-Ziel angeben, wird nur das jar: jar-Ziel ausgeführt, um Ihren Code in ein jar zu packen. Wenn Sie das Kompilierungsziel zuvor noch nicht ausgeführt oder Ihren kompilierten Code auf andere Weise vorbereitet haben, kann dies sehr wahrscheinlich fehlschlagen.
quelle
mvn archetype:generate
und in diesem Fall führt maven nur das Ziel aus?mvn test
läuft :--- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:test
, währendmvn compiler:testCompile
nur läuft--- maven-compiler-plugin:3.1:testCompile ...
.mvn clean compiler:testCompile
Läufe ,--- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompile
die mit fehlschlägtFailed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhase
(woMvnPhase
wird die Klasse im Test in der Testklasse verwiesen). Anscheinend werden Phasen nicht aufgerufen, wenn ein Ziel explizit aufgerufen wird.Maven basiert auf dem zentralen Konzept eines Build Life Cycles . In jedem Build-Lebenszyklus gibt es Build-Phasen und in jeder Build-Phase gibt es Build-Ziele .
Wir können entweder eine Build-Phase oder ein Build-Ziel ausführen. Bei der Ausführung einer Build-Phase führen wir alle Build-Ziele innerhalb dieser Build-Phase aus. Build-Ziele werden einer oder mehreren Build-Phasen zugewiesen. Wir können ein Build-Ziel auch direkt ausführen.
Es gibt drei wichtige integrierte Build-Lebenszyklen :
Jeder Build-Lebenszyklus besteht aus Phasen
Beispielsweise
default
umfasst der Lebenszyklus die folgenden Erstellungsphasen :Um die obigen Phasen zu durchlaufen, müssen wir nur einen Befehl aufrufen:
Für den obigen Befehl werden ab der ersten Phase alle Phasen nacheinander bis zur Installationsphase ausgeführt.
mvn
kann entweder ein Ziel oder eine Phase (oder sogar mehrere Ziele oder mehrere Phasen) wie folgt ausführen:Wenn Sie jedoch das Präfix anpassen möchten, das zum Verweisen auf Ihr Plugin verwendet wird, können Sie das Präfix direkt über einen Konfigurationsparameter
maven-plugin-plugin
im POM Ihres Plugins angeben .Eine Build-Phase besteht aus Plugin- Zielen
Die meisten Funktionen von Maven sind Plugins. Ein Plugin bietet eine Reihe von Zielen , die mit der folgenden Syntax ausgeführt werden können:
Beispielsweise kann ein Java-Projekt durch Ausführen mit dem Kompilierungsziel des Compiler-Plugins kompiliert werden
mvn compiler:compile
.Der Build-Lebenszyklus ist eine Liste benannter Phasen, mit denen die Zielausführung angeordnet werden kann.
Von Plugins bereitgestellte Ziele können verschiedenen Phasen des Lebenszyklus zugeordnet werden. Beispielsweise ist das Ziel standardmäßig
compiler:compile
dercompile
Phase zugeordnet , während das Zielsurefire:test
dertest
Phase zugeordnet ist . Betrachten Sie den folgenden Befehl:Wenn der vorhergehende Befehl ausgeführt wird, führt Maven alle Ziele aus, die jeder der Phasen bis einschließlich der
test
Phase zugeordnet sind. In einem solchen Fall führt Maven dann dasresources:resources
mit derprocess-resources
Phase verknüpfte Ziel auscompiler:compile
und so weiter, bis es schließlich dassurefire:test
Ziel ausführt.Obwohl eine Build-Phase für einen bestimmten Schritt im Build-Lebenszyklus verantwortlich ist, kann die Art und Weise, in der diese Verantwortlichkeiten ausgeführt werden, variieren. Dazu werden die Plugin-Ziele deklariert, die an diese Erstellungsphasen gebunden sind.
Ein Plugin-Ziel stellt eine bestimmte Aufgabe dar (feiner als eine Erstellungsphase), die zum Erstellen und Verwalten eines Projekts beiträgt. Es kann an null oder mehr Erstellungsphasen gebunden sein. Ein Ziel, das nicht an eine Build-Phase gebunden ist, kann außerhalb des Build-Lebenszyklus durch direkten Aufruf ausgeführt werden. Die Reihenfolge der Ausführung hängt von der Reihenfolge ab, in der die Ziele und die Erstellungsphase (n) aufgerufen werden. Betrachten Sie beispielsweise den folgenden Befehl. Die
clean
undpackage
Argumente sind Erstellungsphasen, während dasdependency:copy-dependencies
ein Ziel (eines Plugins) ist.Wenn dies ausgeführt wird, wird zuerst die
clean
Phase ausgeführt (dh alle vorhergehenden Phasen des sauberen Lebenszyklus sowie dieclean
Phase selbst werden ausgeführt) und dann dasdependency:copy-dependencies
Ziel, bevor die endgültige Ausführung ausgeführt wirdpackage
Phase (und alle vorhergehenden Erstellungsphasen von) der Standardlebenszyklus).Wenn ein Ziel an eine oder mehrere Erstellungsphasen gebunden ist, wird dieses Ziel in allen diesen Phasen aufgerufen.
Darüber hinaus können an eine Build-Phase null oder mehr Ziele gebunden sein. Wenn an eine Erstellungsphase keine Ziele gebunden sind, wird diese Erstellungsphase nicht ausgeführt. Wenn jedoch ein oder mehrere Ziele daran gebunden sind, werden alle diese Ziele ausgeführt.
Eingebaute Lebenszyklusbindungen
einigen Phasen sind standardmäßig Ziele gebunden. Für den Standardlebenszyklus hängen diese Bindungen vom Verpackungswert ab.
Maven Architektur:
Referenz 1
Referenz 2
Eclipse-Beispiel für Maven Lifecycle Mapping
quelle
[plugin-name]
im Beispielmvn [plugin-name]:[goal-name]
ist eher ein Plugin-Präfix .mvn clean install
kann nicht nur " in einem Szenario mit mehreren Modulen verwendet werden ". Multi-Modul ist ein ganz anderes Thema.Die gewählte Antwort ist großartig, aber ich möchte dem Thema dennoch etwas Kleines hinzufügen. Eine Illustration.
Es zeigt deutlich, wie die verschiedenen Phasen an verschiedene Plugins gebunden sind und welche Ziele diese Plugins setzen.
Lassen Sie uns einen Fall untersuchen, in dem Folgendes ausgeführt wird
mvn compile
:mvn compile
es ist einem bestimmten Ziel zugeordnet, dem Kompilierungsziel.mvn compiler:compile
Daher besteht die Phase aus Plugin-Zielen .
Link zur Referenz
quelle
mvn test
zeigt aufpackage
undmvn install
zeigt aufdeploy
?jar
Plugin läuft tatsächlich in derpackage
Phase. Und der Pom im Sandwich zwischen Phasen und Plugins ist etwas verwirrend (ich nehme an, es sollte bedeuten, dass Sie im Pom zusätzlich zu den Standardbindungen konfigurieren können, welche Plugins in welchen Phasen ausgeführt werden). Das allgemeine Prinzip ist jedoch richtig.Die Definitionen sind auf der Seite Einführung in den Build-Lebenszyklus der Maven-Site detailliert beschrieben , aber ich habe versucht, sie zusammenzufassen :
Maven definiert 4 Elemente eines Erstellungsprozesses:
Lebenszyklus
Drei eingebaute in Lifecycles (aka Build Lifecycles ):
default
,clean
,site
. ( Lebenszyklusreferenz )Phase
Jeder Lebenszyklus besteht aus aus Phasen , zB für den
default
Lebenszyklus:compile
,test
,package
,install
, usw.Plugin
Ein Artefakt, das ein oder mehrere Ziele bietet.
Basierend auf Verpackungsart (
jar
,war
usw.) Plugins' Ziele sind Phasen standardmäßig gebunden. ( Eingebaute Lebenszyklusbindungen )Tor
Die Aufgabe (Aktion), die ausgeführt wird. Ein Plugin kann ein oder mehrere Ziele haben.
Bei der Konfiguration eines Plugins in einem POM müssen ein oder mehrere Ziele angegeben werden . Falls für ein Plugin keine Standardphase definiert ist, können die angegebenen Ziele an eine Phase gebunden werden.
Maven kann aufgerufen werden mit:
clean
,package
)<plugin-prefix>:<goal>
(zBdependency:copy-dependencies
)<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
(zBorg.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
)mit einer oder mehreren Kombinationen von einem oder allen, z.
quelle
Build Phase
, sehe ich sie als eine weitere Phase in einem Lebenszyklus, und das verwirrt mich.Ich glaube , eine gute Antwort ist bereits vorgesehen, aber ich möchte ein easy-to-follow Diagramm der verschiedenen 3 - Lebenszyklen hinzuzufügen (
build
,clean
, undsite
) und die Phasen in jedem.Die fettgedruckten Phasen sind die üblicherweise verwendeten Hauptphasen.
quelle
generate-resources
erscheint zweimal undgenerate-sources
fehlt.Gutschrift an Sandeep Jindal und Premraj. Ihre Erklärung hilft mir zu verstehen, nachdem ich eine Weile darüber verwirrt war.
Ich habe hier einige vollständige Codebeispiele und einige einfache Erklärungen erstellt. Https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Ich denke, es kann anderen helfen, zu verstehen.
Kurz gesagt, Sie sollten nicht versuchen, alle drei gleichzeitig zu verstehen. Zuerst sollten Sie die Beziehung in diesen Gruppen verstehen:
1. Lebenszyklus gegen Phase
Der Lebenszyklus ist eine Sammlung von Phasen nacheinander, siehe hier Lebenszyklusreferenzen . Wenn Sie eine Phase aufrufen , werden auch alle Phasen aufgerufen davor .
Zum Beispiel hat der saubere Lebenszyklus 3 Phasen ( Vorreinigung, Reinigung, Nachreinigung ).
Es wird Vorreinigung und Reinigung genannt .
2. Plugin gegen Ziel
Ziel ist wie eine Aktion im Plugin . Wenn das Plugin eine Klasse ist, ist das Ziel eine Methode.
Sie können ein Ziel wie folgt nennen:
Dies bedeutet "Aufruf des sauberen Ziels im sauberen Plugin" (Hier bezieht sich nichts auf die saubere Phase. Lassen Sie sich nicht vom Wort "sauber" verwirren, sie sind nicht dasselbe!)
3. Nun die Beziehung zwischen Phase & Ziel:
Phase kann (vor) Links zu Tor (e) .Für Beispiel, in der Regel, die saubere Phase Anschluss an das sauberen Ziel. Wenn Sie diesen Befehl aufrufen:
Es wird die Vorreinigungsphase und die Reinigungsphase genannt, die mit dem Ziel "sauber: sauber" verbunden sind.
Es ist fast das gleiche wie:
Weitere Details und vollständige Beispiele finden Sie unter https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/
quelle
Maven-Arbeitsterminologie mit Phasen und Zielen.
Phase: Die Maven-Phase ist eine Reihe von Aktionen, die mit 2 oder 3 Zielen verbunden sind
Beispiel: - Wenn Sie mvn clean ausführen
In dieser Phase wird das Ziel mvn clean: clean ausgeführt
Ziel: Maven-Ziel mit der Phase begrenzt
als Referenz http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
quelle
Es gibt drei integrierte Build-Lebenszyklen:
Lebenszyklusstandard -> [validieren, initialisieren, Quellen generieren, Prozessquellen, Ressourcen generieren, Prozessressourcen, kompilieren, Prozessklassen, Testquellen generieren, Prozesstestquellen generieren, Testressourcen generieren, Prozess -Testressourcen, Testkompilieren, Prozesstestklassen, Test, Vorbereitungspaket, Paket, Test vor der Integration, Integrationstest, Test nach der Integration, Verifizieren, Installieren, Bereitstellen]
Lebenszyklus sauber -> [Vorreinigung, Reinigung, Nachreinigung]
Lebenszyklus-Site -> [Pre-Site, Site, Post-Site, Site-Deployment]
Der Ablauf ist sequentiell, z. B. für den Standardlebenszyklus . Er beginnt mit der Validierung , der Initialisierung usw.
Sie können den Lebenszyklus überprüfen, indem Sie den Debug-Modus aktivieren
mvn
, z.mvn -X <your_goal>
quelle