Appearance
生命周期与插件
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-pluginsurefire对应org.apache.maven.plugins:maven-surefire-pluginjar对应org.apache.maven.plugins:maven-jar-pluginwar对应org.apache.maven.plugins:maven-war-plugindeploy对应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 的生命周期和插件系统,您可以更好地控制项目的构建过程,自定义构建行为,提高构建效率。