Maven踩坑——父模块生命周期的操作会被子模块继承

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-pluginmaven-resources-plugin,你可以在子模块的 pom.xml 中显式设置 skiptrue

通过插件 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

在子模块中,明确配置需要跳过的插件并设置 skiptrue

<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>

避免子模块执行父模块插件的总结

  1. 通过 skip 控制插件跳过:在子模块中,可以配置插件的 <skip> 参数为 true,从而避免子模块执行父模块的插件操作。
  2. 父模块插件配置的继承:父模块的插件配置在默认情况下会继承给子模块,除非你在子模块中配置插件并显式使用 skip 参数。
  3. 阶段与生命周期的控制:可以通过将插件的执行绑定到特定生命周期的阶段,来控制插件在父模块中的执行时机。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值