天天看點

Maven 插件

Maven 有以下三個标準的生命周期:

  • clean:項目清理的處理
  • default(或 build):項目部署的處理
  • site:項目站點文檔建立的處理

每個生命周期中都包含着一系列的階段(phase)。這些 phase 就相當于 Maven 提供的統一的接口,然後這些 phase 的實作由 Maven 的插件來完成。

我們在輸入 mvn 指令的時候 比如 mvn clean,clean 對應的就是 Clean 生命周期中的 clean 階段。但是 clean 的具體操作是由 maven-clean-plugin 來實作的。

是以說 Maven 生命周期的每一個階段的具體實作都是由 Maven 插件實作的。

Maven 實際上是一個依賴插件執行的架構,每個任務實際上是由插件完成。Maven 插件通常被用來:

  • 建立 jar 檔案
  • 建立 war 檔案
  • 編譯代碼檔案
  • 代碼單元測試
  • 建立工程文檔
  • 建立工程報告

插件通常提供了一個目标的集合,并且可以使用下面的文法執行:

<code>mvn [plugin-name]:[goal-name]</code>      

例如,一個 Java 工程可以使用 maven-compiler-plugin 的 compile-goal 編譯,使用以下指令:

<code>mvn compiler:compile</code>      

插件類型

Maven 提供了下面兩種類型的插件:

類型 描述
Build plugins 在建構時執行,并在 pom.xml 的 元素中配置。
Reporting plugins 在網站生成過程中執行,并在 pom.xml 的 元素中配置。

下面是一些常用插件的清單:

插件
clean 建構之後清理目标檔案。删除目标目錄。
compiler 編譯 Java 源檔案。
surefile 運作 JUnit 單元測試。建立測試報告。
jar 從目前工程中建構 JAR 檔案。
war 從目前工程中建構 WAR 檔案。
javadoc 為工程生成 Javadoc。
antrun 從建構過程的任意一個階段中運作一個 ant 任務的集合。

執行個體

我們已經在我們的例子中大量使用了 maven-antrun-plugin 來輸出資料到控制台上。請檢視 Maven - 建構配置檔案 章節。讓我們用一種更好的方式了解這部分内容,在 C:\MVN\project 目錄下建立一個 pom.xml 檔案。

<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.clean</id>

<phase>clean</phase>

<goals>

<goal>run</goal>

</goals>

<configuration>

<tasks>

<echo>clean phase</echo>

</tasks>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

</project>

接下來,打開指令終端跳轉到 pom.xml 所在的目錄,并執行下面的 mvn 指令。

mvn clean      

Maven 将開始處理并顯示 clean 生命周期的 clean 階段。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
     [echo] 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] ------------------------------------------------------------------      

上面的例子展示了以下關鍵概念:

  • 插件是在 pom.xml 中使用 plugins 元素定義的。
  • 每個插件可以有多個目标。
  • 你可以定義階段,插件會使用它的 phase 元素開始處理。我們已經使用了 clean 階段。
  • 你可以通過綁定到插件的目标的方式來配置要執行的任務。我們已經綁定了 echo 任務到 maven-antrun-plugin 的 run 目标。
  • 就是這樣,Maven 将處理剩下的事情。它将下載下傳本地倉庫中擷取不到的插件,并開始處理。
上一篇: LR