6.1 插件介紹

標準生命週期可以通過使用 Maven 插件的功能得到增強。插件允許您將新步驟插入標準循環(例如,分發到應用程序服務器)或擴展現有步驟。

Maven中的插件並不是什麼了不起的東西,相反,它是最常見、最常遇到的東西。畢竟,如果你想設置一些構建項目的細微差別,那麼你需要在 pom.xml 中指定必要的信息。而做到這一點的唯一方法就是編寫一個“插件”。

由於插件與依賴項一樣都是工件,因此它們的描述方式大致相同。而不是依賴項部分 - 插件,而不是依賴項 - 插件,而不是存儲庫 - pluginRepositories,存儲庫 - pluginRepository。

例子:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.6</version>
    </plugin>
</plugins>

在 pom.xml 中聲明插件允許您修復插件版本,並為其設置必要的參數,定義各種配置參數並綁定到階段。

換句話說,Maven 運行某些插件來完成所有工作。也就是說,如果我們想教 Maven 關於項目的特殊構建,那麼我們需要向 pom.xml 添加一個指示,以在所需的階段和所需的參數中啟動所需的插件

可用的插件數量非常多,有各種插件可以讓你直接從 maven 運行一個 web 應用程序,在瀏覽器中測試它,生成資源等等。在這種情況下,開發人員的主要任務是找到並應用最合適的插件集

6.2 生命週期和插件

通常,插件用於在特定階段的執行期間啟動某種控制台實用程序。此外,我們甚至可以運行一個常規的 Java 類(當然,它有一個 main 方法)。

例子:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>first-argument</argument>
      <argument>second-argument</argument>
    </arguments>
  </configuration>
</plugin>

通常插件可以非常靈活地配置。Maven 開發人員的所有官方插件都在官方 Maven 網站上有很好的記錄。例如,對於Apache Maven 項目頁面上的maven-compiler-plugin,您可以看到控制該插件的所有變量的列表。有關插件的信息可在鏈接中找到

更重要的信息。不同的插件在其生命週期的不同階段被 Maven 調用。例如,一個描述 swing Java 桌面應用程序的項目與典型的 Web 應用程序(戰爭)開發具有不同的生命週期階段。

或者,例如,當執行命令“mvn test”時,啟動了項目生命週期中的一整套步驟:“process-resources”、“compile”、“process-classes”、“process-test” -資源”,“測試編譯”,測試。您可以在 Maven 顯示的消息中看到對這些階段的提及:

[INFO] Scanning for projects...
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources)     @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile)      @ codegym
[INFO] --- maven-resources-plugin:2.6:testResources         (default-testResources) @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)          @ codegym ---
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test)         @ codegym ---
[INFO] Surefire report directory:           t:\ projects\codegym\target\surefire-reports

6.3 Maven 中的目標 - 目標

在Maven中,還有目標(goal)這樣的東西。目標有點像 Maven 啟動目標。主要目標與主要階段一致:

  • 證實;
  • 編譯;
  • 測試;
  • 包裹;
  • 核實;
  • 安裝;
  • 部署。

在項目生命週期的每個階段,都會調用一個特定的插件(jar-library),其中包含了一些目標(goal)

例如,“maven-compiler-plugin”插件包含兩個目標:compiler:compile 用於編譯項目的主要源代碼,compiler:testCompile 用於編譯測試。形式上,可以更改階段列表,儘管很少有必要這樣做。

如果你需要在某個階段執行一些非標準的動作,那麼你只需要在pom.xml中添加合適的插件即可

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>Name-plugin</artifactId>
  <executions>
    <execution>
      <id>customTask</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>pluginGoal</goal>
      </goals>
    </execution>
  </executions>
</plugin>

在這種情況下最重要的是為插件定義“執行/階段”階段的名稱,您需要在其中嵌入對插件“目標”目標的調用。比如你需要根據xml生成Java代碼。然後您需要“生成源代碼”階段,它位於調用編譯階段之前,非常適合生成項目的部分源代碼。