Maven-Build-Lebenszyklus

Der Maven-Build-Lebenszyklus definiert einen Prozess zum Erstellen und Veröffentlichen eines Projekts und umfasst drei Standard-Lebenszyklen:

  • clean: bereinigt das Projekt
  • default (oder build): der zentrale Build-Prozess
  • site: erzeugt die Projektdokumentation

Jeder Lebenszyklus besteht aus mehreren Phasen, die in der Reihenfolge ausgeführt werden.

1. Clean-Lebenszyklus

Der clean-Lebenszyklus ist für das Bereinigen der temporären Dateien und Verzeichnisse des Projekts (hauptsächlich target/) verantwortlich und umfasst die folgenden Hauptphasen:

PhaseBeschreibungAutomatisch gebundene Plugin-Ziele
pre-cleanVor dem Bereinigen auszuführende ArbeitKeine Standardbindung
cleanDeletetarget/Verzeichnis sichernmaven-clean-plugin:clean
post-cleanNach dem Bereinigen auszuführende AbschlussarbeitenKeine Standardbindung

Gängige Befehle:

mvn clean      # 执行clean阶段(包含pre-clean和clean)

2. Standard-Lebenszyklus

Der Standard-Lebenszyklus ist Mavens wichtigster Lebenszyklus und enthält alle Kernschritte zum Erstellen und Bereitstellen eines Projekts.

Ein typischer Maven-Build-Lebenszyklus besteht aus der folgenden Abfolge von Phasen:

Phase Aktion Beschreibung
validate Das Projekt validieren Validieren Sie, dass das Projekt korrekt ist und alle erforderlichen Informationen verfügbar sind.
compile Kompilierung durchführen In dieser Phase wird die Kompilierung des Quellcodes abgeschlossen.
test Test Tests mit einem geeigneten Unit-Testing-Framework (z. B. JUnit) ausführen.
package Paket Den kompilierten Code in ein verteilbares Format wie JAR oder WAR paketieren.
verify Prüfen Überprüfen Sie die Ergebnisse der Integrationstests, um sicherzustellen, dass die Qualität den Standards entspricht.
install Installation Das paketierte Projekt im lokalen Repository installieren, damit es von anderen Projekten verwendet werden kann.
deploy Deploy Kopieren Sie das fertige Projektpaket in das Remote-Repository, um es mit anderen Entwicklern und Projekten zu teilen.

Um den Standard-Lebenszyklus abzuschließen, werden diese Phasen (einschließlich anderer oben nicht aufgeführter Lebenszyklusphasen) in der angegebenen Reihenfolge ausgeführt.

Phasenabhängigkeiten:

Gängige Befehle:

mvn compile     # 编译主代码
mvn test        # 运行测试
mvn package     # 打包(生成target/*.jar)
mvn install     # 安装到本地仓库(~/.m2/repository)
mvn deploy      # 部署到远程仓库(需配置distributionManagement)

3. Site-Lebenszyklus

Der Site-Lebenszyklus wird verwendet, um die Projekt-Site-Dokumentation zu generieren:

PhaseBeschreibungAutomatisch gebundene Plugin-Ziele
pre-siteVorbereitung vor der Site-GenerierungKeine Standardbindung
siteProjekt-Site-Dokumentation generierenmaven-site-plugin:site
post-siteNachbereitung nach der SiteKeine Standardbindung
site-deployDie Site auf einem Server bereitstellenmaven-site-plugin:deploy

Gängige Befehle:

mvn site        # 生成站点(输出在target/site/)
mvn site-deploy # 部署站点(需配置site URL)

Lebenszyklusübersicht

Maven hat die folgenden drei Standard-Lebenszyklen:

1. Clean-Lebenszyklus:

  • clean: Löscht die kompilierten Ausgabedateien im Zielverzeichnis. Dies wird normalerweise vor dem Build ausgeführt, um sicherzustellen, dass das Projekt von einem sauberen Zustand aus startet.

2. Standard-Lebenszyklus (auch bekannt als Build-Lebenszyklus):

  • validate: Validiert die Korrektheit des Projekts, zum Beispiel wird geprüft, ob die Projektversion korrekt ist.
  • compile: Kompiliert den Quellcode des Projekts.
  • test: Führt die Unit-Tests des Projekts aus.
  • package: Verpackt den kompilierten Code in ein verteilbares Format, wie JAR oder WAR.
  • verify: Führt zusätzliche Prüfungen am Projekt durch, um die Qualität sicherzustellen.
  • install: Installiert die Build-Ausgabe des Projekts im lokalen Maven-Repository zur Verwendung durch andere Projekte.
  • deploy: Kopiert die Build-Ausgabe des Projekts in das Remote-Repository zur Verwendung durch andere Entwickler oder Teams.

3. Site-Lebenszyklus:

  • site: Generiert Projektdokumentation und Site-Informationen.
  • deploy-site: Veröffentlichen Sie die Informationen zur generierten Site auf einem Remote-Server, um die Projektdokumentation zu teilen.

Build-Phasen bestehen aus Plugin-Zielen

Ein Plugin-Ziel repräsentiert eine bestimmte Aufgabe (feinkörniger als eine Build-Phase), die bei der Erstellung und Verwaltung eines Projekts hilft. Diese Ziele können an mehrere Phasen oder an keine Phase gebunden sein. Ziele, die an keine Build-Phase gebunden sind, können außerhalb des Build-Lebenszyklus durch direkten Aufruf ausgeführt werden. Die Ausführungsreihenfolge dieser Ziele hängt von der Reihenfolge der aufgerufenen Ziele und Build-Phasen ab.

Betrachten Sie beispielsweise den folgenden Befehl:

clean und package sind Build-Phasen, und dependency:copy-dependencies ist ein Ziel.

mvn clean dependency:copy-dependencies package

Hier wird zuerst die clean-Phase ausgeführt, dann das Ziel dependency:copy-dependencies und schließlich die package-Phase.


1. Clean-Lebenszyklus

Wenn wir den Befehl mvn post-clean ausführen, ruft Maven den clean-Lebenszyklus auf, der die folgenden Phasen umfasst:

  • pre-clean: führt einige Arbeiten aus, die vor clean abgeschlossen werden müssen.
  • clean: entfernt alle Dateien, die vom vorherigen Build erzeugt wurden.
  • post-clean: führt einige Arbeiten aus, die unmittelbar nach clean erledigt werden müssen.

Das clean in mvn clean ist dasselbe clean wie oben. In einem Lebenszyklus werden, wenn eine bestimmte Phase ausgeführt wird, auch alle Phasen davor ausgeführt. Das heißt, wenn Sie mvn clean ausführen, werden die folgenden zwei Lebenszyklusphasen ausgeführt:

pre-clean, clean

Wenn wir mvn post-clean ausführen, werden die folgenden drei Lebenszyklusphasen ausgeführt:

pre-clean, clean, post-clean

Wir können das Betriebsverhalten dieses Teils ändern, indem wir Ziele in jeder Phase des oben beschriebenen Clean-Lifecycles definieren.

Im folgenden Beispiel fügen wir das Ziel maven-antrun-plugin:run zu den Phasen pre-clean, clean und post-clean hinzu. Auf diese Weise können wir Textinformationen in jeder Phase des Clean-Lifecycles anzeigen.

Wir haben eine pom.xml-Datei im Verzeichnis C:\MVN\project erstellt.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-clean</id> <phase>pre-clean</phase> <goals> <goal>Ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>pre-clean-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.clean</id> <Phase>clean</Phase> <Ziele> <Ziel>ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>clean-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.post-clean</id> <Phase>post-clean</Phase> <Ziele> <Ziel>Ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>post-clean-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> </Ausführungen> </Plugin> </Plugins> </Build> </Projekt>

Öffnen Sie nun die Befehlskonsole, navigieren Sie zum Verzeichnis, das pom.xml enthält, und führen Sie den folgenden mvn-Befehl aus.

C:\MVN\project>mvn post-clean

Maven beginnt mit der Verarbeitung und zeigt alle Phasen des clean-Lebenszyklus an.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
     [echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
     [echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
     [echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------

Sie können versuchen, den Befehl mvn clean so zu ändern, dass pre-clean und clean angezeigt werden, während in der post-clean-Phase keine Operationen ausgeführt werden.


2. Standard-Lebenszyklus (Build)

Dies ist Mavens Haupt-Lebenszyklus, der zum Erstellen von Anwendungen verwendet wird und die folgenden 23 Phasen umfasst:

Lebenszyklusphase Beschreibung
validate (Validierung) Stellen Sie sicher, dass das Projekt korrekt ist und alle notwendigen Informationen verfügbar sind, um den Build-Prozess des Projekts abzuschließen.
initialize (Initialisierung) Initialisieren Sie den Build-Status, z. B. durch Festlegen von Eigenschaftswerten.
generate-sources (Quellcode generieren) Erzeugen Sie jeglichen Quellcode, der in die Kompilierungsphase einbezogen wird.
process-sources (Quellcode verarbeiten) Verarbeiten Sie den Quellcode, zum Beispiel filtern Sie beliebige Werte.
generate-resources (Ressourcendateien generieren) Generieren Sie Ressourcendateien, die in das Projektpaket aufgenommen werden.
process-resources (Ressourcendateien verarbeiten) Kopieren und verarbeiten Sie Ressourcen in das Zielverzeichnis, um die Verpackungsphase vorzubereiten.
compile (Kompilierung) Kompilieren Sie den Quellcode des Projekts.
process-classes (Klassendateien verarbeiten) Verarbeiten Sie die durch die Kompilierung generierten Dateien, zum Beispiel führen Sie Bytecode-Verbesserung und -Optimierung an Java-Klassendateien durch.
generate-test-sources (Testquellcode generieren) Generiere beliebigen Test-Quellcode, der in die Kompilierungsphase einbezogen wird.
process-test-sources (Test-Quellcode verarbeiten) Verarbeite den Test-Quellcode, zum Beispiel filtere beliebige Werte.
generate-test-resources (Test-Ressourcendateien generieren) Erstelle Ressourcendateien für Tests.
process-test-resources (Test-Ressourcendateien verarbeiten) Kopiere und verarbeite Test-Ressourcen in das Zielverzeichnis.
test-compile (Test-Quellcode kompilieren) Kompiliere Test-Quellcode in das Test-Zielverzeichnis.
process-test-classes (Test-Klassendateien verarbeiten) Verarbeite Dateien, die durch die Kompilierung von Test-Quellcode erzeugt wurden.
test (Testen) Führen Sie Tests mit einem geeigneten Unit-Test-Framework aus (JUnit ist eines davon).
prepare-package (Paketierung vorbereiten) Führen Sie alle erforderlichen Operationen aus, um die Paketierung vor der eigentlichen Paketierung vorzubereiten.
package (Paket) Paketieren Sie den kompilierten Code in ein verteilbares Format wie JAR-, WAR- oder EAR-Dateien.
pre-integration-test (vor Integrationstests) Führen Sie notwendige Aktionen vor der Ausführung von Integrationstests durch. Richten Sie beispielsweise die erforderliche Umgebung ein.
integration-test (Integrationstest) Verarbeiten und deployen Sie das Projekt in eine Umgebung, in der Integrationstests ausgeführt werden können.
post-integration-test (nach Integrationstests) Führen Sie notwendige Aktionen aus, nachdem die Integrationstests ausgeführt wurden. Bereinigen Sie beispielsweise die Integrationstestumgebung.
verify (verifizieren) Führen Sie alle Prüfungen aus, um zu überprüfen, ob das Projektpaket gültig ist und die Qualitätsstandards erfüllt.
install (install) Installieren Sie das Projektpaket im lokalen Repository, damit es als Abhängigkeit für andere lokale Projekte verwendet werden kann.
deploy (deploy) Kopieren Sie das endgültige Projektpaket in das Remote-Repository, um es mit anderen Entwicklern und Projekten zu teilen.

Es gibt einige wichtige Konzepte im Zusammenhang mit dem Maven-Lebenszyklus, die erklärt werden müssen:

Wenn eine Phase über einen Maven-Befehl wie mvn compile aufgerufen wird, werden nur alle Phasen bis einschließlich dieser Phase ausgeführt.

Verschiedene Maven-Ziele werden je nach Packaging-Typ (JAR / WAR / EAR) an verschiedene Maven-Lebenszyklusphasen gebunden.

Im folgenden Beispiel fügen wir das Ziel maven-antrun-plugin:run zu einigen Phasen des Build-Lebenszyklus hinzu. Auf diese Weise können wir die textuellen Informationen des Lebenszyklus anzeigen.

Wir haben die Datei pom.xml im Verzeichnis C:\MVN\project bereits aktualisiert.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.validate</id> <phase>validate</Phase> <Ziele> <Ziel>Ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>validate-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.compile</id> <Phase>compile</Phase> <Ziele> <Ziel>ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>compile-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.test</id> <Phase>test</Phase> <Ziele> <Ziel>Ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>test-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.package</id> <Phase>package</Phase> <Ziele> <Ziel>ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>package-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.deploy</id> <Phase>deploy</Phase> <Ziele> <Ziel>Ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>deploy-Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> </Ausführungen> </Plugin> </Plugins> </Build> </Projekt>

Öffnen Sie nun die Befehlskonsole, navigieren Sie zum Verzeichnis, das pom.xml enthält, und führen Sie den folgenden mvn-Befehl aus.

C:\MVN\project>mvn compile

Maven beginnt mit der Verarbeitung und zeigt die verschiedenen Phasen des Build-Lebenszyklus bis zur compile-Phase an.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [compile]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
     [echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
     [echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] ------------------------------------------------------------------

Aufruf über die Kommandozeile

In einer Entwicklungsumgebung verwenden Sie den folgenden Befehl, um das Projekt zu bauen und im lokalen Repository zu installieren.

mvn install

Dieser Befehl führt die Phasen des Standard-Lebenszyklus (validate, compile, package usw.) der Reihe nach aus, bevor die install-Phase ausgeführt wird. Wir müssen nur die letzte Phase aufrufen, wie hier install.

In einer Build-Umgebung verwenden Sie den folgenden Aufruf, um das Projekt sauber zu bauen und im gemeinsamen Repository bereitzustellen.

mvn clean deploy

Dieser Befehl kann auch in einem Multi-Modul-Szenario verwendet werden, d. h. in einem Projekt, das mehrere Unterprojekte enthält. Maven führt den clean-Befehl für jedes Unterprojekt aus und führt anschließend den deploy-Befehl aus.


3. Site-Lebenszyklus

Das Maven Site Plugin wird im Allgemeinen verwendet, um neue Berichtsdokumente zu erstellen, Sites bereitzustellen usw.

  • pre-site: Führt einige Arbeiten aus, die vor dem Generieren der Site-Dokumentation abgeschlossen sein müssen.
  • site: Generiert die Site-Dokumentation des Projekts.
  • post-site: Führt einige Arbeiten aus, die nach dem Generieren der Site-Dokumentation abgeschlossen sein müssen, und bereitet die Bereitstellung vor.
  • site-deploy: Stellt die generierte Site-Dokumentation auf einem bestimmten Server bereit.

Die hier am häufigsten verwendeten Phasen sind die site-Phase und die site-deploy-Phase, die zum Generieren und Veröffentlichen der Maven-Site verwendet werden. Dies ist eine recht leistungsfähige Funktion von Maven, und Manager mögen sie sehr, weil Dokumentation und Statistiken automatisch generiert werden und gut aussehen. Im folgenden Beispiel fügen wir das Ziel maven-antrun-plugin:run zu allen Phasen des Site-Lebenszyklus hinzu. Auf diese Weise können wir alle Textinformationen des Lebenszyklus anzeigen.

Wir haben die Datei pom.xml im Verzeichnis C:\MVN\project bereits aktualisiert.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-site</id> <Phase>pre-site</Phase> <Ziele> <Ziel>Ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>pre-site Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.site</id> <Phase>site</Phase> <Ziele> <Ziel>ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>site Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.post-site</id> <Phase>post-site</Phase> <Ziele> <Ziel>Ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>post-site Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> <Ausführung> <id>id.site-deploy</id> <Phase>site-deploy</Phase> <Ziele> <Ziel>ausführen</Ziel> </Ziele> <Konfiguration> <Aufgaben> <echo>site-deploy Phase</echo> </Aufgaben> </Konfiguration> </Ausführung> </Ausführungen> </Plugin> </Plugins> </Build> </Projekt>

Öffnen Sie nun die Befehlskonsole, navigieren Sie zum Verzeichnis, das pom.xml enthält, und führen Sie den folgenden mvn-Befehl aus.

C:\MVN\project>mvn site

Maven wird mit der Verarbeitung beginnen und die verschiedenen Phasen des Site-Lebenszyklus bis zur Site-Phase anzeigen.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
     [echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
     [echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------```
Weitere Erweiterungen