Skip to content

生命周期与插件

6.1 三套生命周期详解

Maven 定义了三套主要的生命周期:Clean、Default 和 Site。每个生命周期由一系列阶段(phase)组成,这些阶段按顺序执行。

6.1.1 Clean 生命周期

Clean 生命周期用于清理项目,包含以下阶段:

阶段描述
pre-clean执行清理前的准备工作
clean清理上一次构建的产物
post-clean执行清理后的收尾工作

6.1.2 Default 生命周期

Default 生命周期是 Maven 的主要生命周期,用于构建项目,包含以下主要阶段:

阶段描述
validate验证项目配置是否正确
initialize初始化构建状态,如创建目录结构
generate-sources生成源代码
process-sources处理源代码,如过滤资源
generate-resources生成资源文件
process-resources处理资源文件,如复制到输出目录
compile编译项目源代码
process-classes处理编译后的类文件,如字节码增强
generate-test-sources生成测试源代码
process-test-sources处理测试源代码
generate-test-resources生成测试资源文件
process-test-resources处理测试资源文件
test-compile编译测试源代码
process-test-classes处理编译后的测试类文件
test运行测试
prepare-package准备打包
package打包项目
pre-integration-test执行集成测试前的准备工作
integration-test运行集成测试
post-integration-test执行集成测试后的收尾工作
verify验证打包产物的质量
install将构建产物安装到本地仓库
deploy将构建产物部署到远程仓库

6.1.3 Site 生命周期

Site 生命周期用于生成项目站点,包含以下阶段:

阶段描述
pre-site执行生成站点前的准备工作
site生成项目站点
post-site执行生成站点后的收尾工作
site-deploy部署项目站点

6.2 常用插件介绍

Maven 的构建过程是由插件来执行的,每个插件可以提供多个目标(goal),每个目标对应一个具体的构建任务。

6.2.1 编译插件(maven-compiler-plugin)

用于编译 Java 源代码。

配置示例:

xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
    <source>11</source>
    <target>11</target>
    <encoding>UTF-8</encoding>
  </configuration>
</plugin>

常用目标:

  • compiler:compile:编译主源代码
  • compiler:testCompile:编译测试源代码

6.2.2 测试插件(maven-surefire-plugin)

用于运行测试。

配置示例:

xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.0.0-M5</version>
  <configuration>
    <includes>
      <include>**/*Test.java</include>
    </includes>
    <excludes>
      <exclude>**/Abstract*.java</exclude>
    </excludes>
  </configuration>
</plugin>

常用目标:

  • surefire:test:运行测试

6.2.3 打包插件

maven-jar-plugin

用于创建 JAR 包。

配置示例:

xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.2.0</version>
  <configuration>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <mainClass>com.example.Main</mainClass>
      </manifest>
    </archive>
  </configuration>
</plugin>

常用目标:

  • jar:jar:创建 JAR 包

maven-war-plugin

用于创建 WAR 包。

配置示例:

xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.3.1</version>
  <configuration>
    <warName>my-webapp</warName>
    <webResources>
      <resource>
        <directory>src/main/resources</directory>
        <targetPath>WEB-INF</targetPath>
      </resource>
    </webResources>
  </configuration>
</plugin>

常用目标:

  • war:war:创建 WAR 包

6.2.4 部署插件(maven-deploy-plugin)

用于部署构建产物到远程仓库。

配置示例:

xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-deploy-plugin</artifactId>
  <version>3.0.0-M1</version>
</plugin>

常用目标:

  • deploy:deploy:部署构建产物到远程仓库
  • deploy:deploy-file:部署单个文件到远程仓库

6.3 插件配置与使用

插件配置

插件可以在 POM 文件的 <build><plugins> 元素中配置:

xml
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <source>11</source>
        <target>11</target>
      </configuration>
    </plugin>
  </plugins>
</build>

执行插件目标

可以使用 mvn 命令来执行插件目标,格式为 mvn [plugin-prefix]:[goal]

bash
# 执行 compiler 插件的 compile 目标
mvn compiler:compile

# 执行 surefire 插件的 test 目标
mvn surefire:test

# 执行 jar 插件的 jar 目标
mvn jar:jar

插件前缀

Maven 为常用插件提供了前缀,例如:

  • compiler 对应 org.apache.maven.plugins:maven-compiler-plugin
  • surefire 对应 org.apache.maven.plugins:maven-surefire-plugin
  • jar 对应 org.apache.maven.plugins:maven-jar-plugin
  • war 对应 org.apache.maven.plugins:maven-war-plugin
  • deploy 对应 org.apache.maven.plugins:maven-deploy-plugin

插件版本管理

为了确保构建的一致性,建议在 POM 文件中显式指定插件版本:

xml
<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M5</version>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

通过了解 Maven 的生命周期和插件系统,您可以更好地控制项目的构建过程,自定义构建行为,提高构建效率。