Maven 生命周期与阶段总结
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 | 编译测试代码。 | |
test | 运行测试代码。 | |
prepare-package | 执行打包前的准备工作。 | |
package | 将编译后的代码打包为可分发格式(如 JAR、WAR 文件)。 | |
pre-integration-test | 集成测试前执行的准备工作。 | |
integration-test | 处理并执行集成测试。 | |
post-integration-test | 集成测试完成后执行的操作。 | |
verify | 运行所有检查,确保项目符合质量标准。 | |
install | 将打包的工件安装到本地仓库中。 | |
deploy | 将项目部署到远程仓库中。 | |
清理生命周期 | pre-clean | 清理前的准备工作。 |
clean | 删除之前生成的构建文件(如目标目录中的文件)。 | |
post-clean | 清理完成后的操作。 | |
站点生命周期 | pre-site | 站点生成前的准备工作。 |
site | 生成项目的站点文档。 | |
post-site | 站点生成后的操作。 | |
site-deploy | 将生成的站点发布到服务器。 |
Maven 生命周期与父子模块插件执行控制
Maven 依赖于生命周期来执行构建任务,父模块和子模块会共享相同的生命周期,但通过适当的配置,可以避免子模块执行父模块的插件操作。
解决方案:通过插件的 skip
参数控制子模块跳过执行
使用插件的 skip
参数,可以让子模块不执行特定插件。例如,对于 maven-antrun-plugin
或 maven-resources-plugin
,你可以在子模块的 pom.xml
中显式设置 skip
为 true
。
通过插件 skip
参数避免子模块执行
以下是一个完整的配置示例:
父模块 pom.xml
<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-module</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>child-module1</module><module>child-module2</module></modules><build><plugins><!-- 父模块执行的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><executions><execution><id>copy-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/resources</directory></resource></resources><outputDirectory>${project.build.directory}/resources</outputDirectory></configuration></execution></executions></plugin></plugins></build>
</project>
子模块 pom.xml
在子模块中,明确配置需要跳过的插件并设置 skip
为 true
:
<project><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>parent-module</artifactId><version>1.0-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><groupId>com.example</groupId><artifactId>child-module1</artifactId><version>1.0-SNAPSHOT</version><build><plugins><!-- 配置要跳过执行的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><skip>true</skip></configuration></plugin></plugins></build>
</project>
避免子模块执行父模块插件的总结
- 通过
skip
控制插件跳过:在子模块中,可以配置插件的<skip>
参数为true
,从而避免子模块执行父模块的插件操作。 - 父模块插件配置的继承:父模块的插件配置在默认情况下会继承给子模块,除非你在子模块中配置插件并显式使用
skip
参数。 - 阶段与生命周期的控制:可以通过将插件的执行绑定到特定生命周期的阶段,来控制插件在父模块中的执行时机。