388 Stimmen

Was sind Maven-Ziele und Phasen und was ist ihr Unterschied?

Was ist der Unterschied / die Beziehung zwischen Maven-Zielen und Phasen? Wie sind sie miteinander verbunden?

19voto

Surasin Tancharoen Punkte 4790

Kredit an Sandeep Jindal und Premraj. Ihre Erklärung half mir, dies zu verstehen, nachdem ich eine Weile verwirrt war.

Ich habe hier einige vollständige Code-Beispiele und einfache Erklärungen erstellt https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/. Ich denke, es könnte anderen helfen zu verstehen.

Kurz gesagt, aus dem Link sollten Sie nicht versuchen, alle drei sofort zu verstehen, zuerst sollten Sie die Beziehung in diesen Gruppen verstehen:

  • Life-Cycle vs. Phase
  • Plugin vs. Ziel

1. Life-Cycle vs. Phase

Life-Cycle ist eine Sammlung von Phasen in Sequenz siehe hier Life-Cycle-Referenzen. Wenn Sie eine Phase aufrufen, werden auch alle Phasen davor aufgerufen.

Zum Beispiel hat der clean life cycle 3 Phasen (pre-clean, clean, post-clean).

mvn clean

Es wird pre-clean und clean aufrufen.

2. Plugin vs. Ziel

Ziel ist wie eine Aktion in einem Plugin. Also, wenn das Plugin eine Klasse ist, ist das Ziel eine Methode.

Sie können ein Ziel wie folgt aufrufen:

mvn clean:clean

Dies bedeutet "Rufen Sie das clean-Ziel im clean-Plugin auf" (Nichts hat hier etwas mit der clean-Phase zu tun. Lassen Sie sich nicht von dem Wort "clean" verwirren, sie sind nicht dasselbe!)

3. Jetzt die Beziehung zwischen Phase & Ziel:

Phase kann (vorher) auf Ziel(s) verweisen. Zum Beispiel verweist normalerweise die clean-Phase auf das clean-Ziel. Wenn Sie also diesen Befehl aufrufen:

mvn clean

Es wird die pre-clean-Phase und die clean-Phase aufrufen, die auf das clean:clean-Ziel verweist.

Es ist fast das gleiche wie:

mvn pre-clean clean:clean

Weitere Details und vollständige Beispiele finden Sie unter https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/

3voto

Vishrant Punkte 12787

Es gibt folgende drei integrierte Build-Lebenszyklen:

  • default
  • clean
  • site

Lebenszyklus default -> [validieren, initialisieren, Quellen generieren, Quellen verarbeiten, Ressourcen generieren, Ressourcen verarbeiten, kompilieren, Klassen verarbeiten, Testquellen generieren, Testquellen verarbeiten, Testressourcen generieren, Testressourcen verarbeiten, Testkompilierung, Testklassen verarbeiten, Test, Paket vorbereiten, Paket erstellen, Vorintegrationstest, Integrationstest, Nachintegrationstest, Überprüfen, Installieren, Bereitstellen]

Lebenszyklus clean -> [Vorabreinigung, Reinigung, Nachreinigung]

Lebenszyklus site -> [Vor-Site, Site, Nach-Site, Site-Bereitstellung]

Der Ablauf ist sequenziell, zum Beispiel startet der default Lebenszyklus mit validieren, dann kommt initialisieren und so weiter...

Sie können den Lebenszyklus über den Debug-Modus von mvn überprüfen, d.h. mvn -X

2voto

Venky Vungarala Punkte 1099

Maven Arbeitsbegriffe mit Phasen und Zielen.

Phase: Maven Phase ist eine Reihe von Aktionen, die mit 2 oder 3 Zielen verbunden sind.

Beispiel: Wenn Sie mvn clean ausführen

Wird diese Phase das Ziel mvn clean:clean ausführen.

Ziel: Maven Ziel gebunden mit der Phase.

Zur Referenz http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html

2voto

Bartosz Popiela Punkte 931

Unter Bezugnahme auf Pace's Antwort,

Wenn Sie bei der Ausführung von Maven ein Ziel angeben, wird nur dieses Ziel und kein anderes ausgeführt. Mit anderen Worten, wenn Sie das Ziel jar:jar angeben, wird nur das Ziel jar:jar ausgeführt, um Ihren Code in ein Jar zu verpacken.

es gibt eine Ausnahme zu dieser Aussage. Maven Plugin API ermöglicht es einem Ziel, die Ausführung einer Lebenszyklusphase auszulösen.

Betrachten Sie das folgende Projekt:

  4.0.0
  org.example
  simple-maven-project
  1.0-SNAPSHOT
  jar

Wenn Sie das Ziel run ausführen, wie es in spring-boot-maven-plugin definiert ist

mvn org.springframework.boot:spring-boot-maven-plugin:run

es druckt

[INFO] ------------------< org.example:simple-maven-project >------------------
[INFO] Building simple-maven-project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:3.0.0:run (default-cli) > test-compile @ simple-maven-project >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ simple-maven-project ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\Users\Bartosz\IdeaProjects\simple-maven-project\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ simple-maven-project ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ simple-maven-project ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\Users\Bartosz\IdeaProjects\simple-maven-project\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ simple-maven-project ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] <<< spring-boot-maven-plugin:3.0.0:run (default-cli) < test-compile @ simple-maven-project <<<
[INFO] 
[INFO] 
[INFO] --- spring-boot-maven-plugin:3.0.0:run (default-cli) @ simple-maven-project ---
[INFO] ------------------------------------------------------------------------

Dies liegt daran, dass die Zieldefinition im spring-boot-maven-plugin-X.X.X.jar/META-INF/maven/plugin.xml enthält test-compile, die test-compile und alle vorhergehenden Phasen ausführt.

    run
    (...)
    test-compile
    (...)

Darüber hinaus werden aufgrund der Standardbindungen für das Verpacken "jar" einige andere Ziele ausgeführt. Wenn das Verpacken auf "pom" geändert wird, führt dieselbe Befehlsausgabe zu

[INFO] ------------------< org.example:simple-maven-project >------------------
[INFO] Building simple-maven-project 1.0-SNAPSHOT
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:3.0.0:run (default-cli) > test-compile @ simple-maven-project >>>
[INFO] 
[INFO] <<< spring-boot-maven-plugin:3.0.0:run (default-cli) < test-compile @ simple-maven-project <<<
[INFO] 
[INFO] 
[INFO] --- spring-boot-maven-plugin:3.0.0:run (default-cli) @ simple-maven-project ---
[INFO] ------------------------------------------------------------------------

weil es keine Standardbindungen für test-compile oder eine vorherige Phase und diesen Typ des Verpackens gibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X