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 將處理剩下的事情。它將下載本地倉庫中獲取不到的插件,並開始處理。