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
参数。 - 阶段与生命周期的控制:可以通过将插件的执行绑定到特定生命周期的阶段,来控制插件在父模块中的执行时机。