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-resources” ”,“测试编译”,测试。您可以在 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代码。然后您需要“生成源代码”阶段,它位于调用编译阶段之前,非常适合生成项目的部分源代码。