首页 > 其他分享 >Maven踩坑——父模块生命周期的操作会被子模块继承

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

时间:2024-09-17 16:48:53浏览次数:8  
标签:插件 生命周期 skip Maven 模块 test resources

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

标签:插件,生命周期,skip,Maven,模块,test,resources
From: https://blog.csdn.net/pumpkin84514/article/details/142314117

相关文章

  • python标准库模块 pickle 详解
    什么是pickle模块?pickle是Python的一个标准库,用于序列化和反序列化Python对象。所谓序列化,就是将一个Python对象转换成字节流,以便存储到磁盘或通过网络传输。反序列化则是将字节流恢复为原来的Python对象。为什么使用pickle?保存Python对象:可以将Python中的各......
  • Maven笔记(二):进阶使用
    Maven笔记(二)-进阶使用一、Maven分模块开发分模块开发对项目的扩展性强,同时方便其他项目引入相同的功能。将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享(类似Jar包一样之间引用、复用)。开发步骤:创建Maven项目书写模块代码分模块开发需要先针对......
  • 【C语言】函数与模块
    目录一、函数(Functions)1.1.函数的基本组成部分1.2.示例:一个简单的C函数1.3.函数调用和返回值二、模块(Modules)2.1.模块的基本构成2.2.C语言模块示例2.3.编译和链接三、使用场景3.1.函数的使用场景3.1.1.实现数学运算3.1.2.数据处理3.1.3.模块化编程3.1.......
  • python之模块和包的导入与使用,pip的使用(13)
    文章目录1、模块1.1模块的分类1.1.1内置模块1.1.2第三方模块(比较重要)1.1.3自定义模块1.2模块的导入1.2.1单个模块的导入1.2.2同时导入多个模块1.2.3模块导入规范1.2.4给导入的模块取别名1.2.5同时导入模块和名字1.2.6给导入的名字取别名扩展:导入模块中所有的......
  • java pom两个模块需要互相引用怎么办
    一:概述 处理Java多模块项目中的互相引用:一种POM管理方式在Java的多模块项目中,模块间的互相引用是一个常见需求。本文将探讨在Maven项目管理工具中,如何有效地实现两个或多个模块之间的互相引用,并通过具体案例来展示不同方法的应用。 ava的多模块项目,通常是指一个项目包含多个子模......
  • 【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
    问题描述需要通过PythonSDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。 问题解答AzureResourceHealth是Azure提供的一项服务,旨在帮助用户了解其资源的健康状态。通过AzureResource......
  • SmartMediaKit生态圈模块特点和应用场景
    SmartMediaKit概述大牛直播SDK跨平台的流媒体内核组件SmartMediaKit,支持Windows、Linux、Android、iOS等多个平台。其架构设计以模块化为核心,提供了高度可扩展性和自适应算法,以满足不同行业和应用场景的需求。1.核心功能模块直播推送模块:支持RTMP、RTSP等多种推流协议,以及H.264、H......
  • C++/Qt版餐厅点餐系统模块作品——演示(有需要的找我)
    点餐管理系统客户端APP代码展示顾客端(客户端)Widget.hChiddrom.hStrucural.hMain.cppWidget.cppChiddrom.cpp二、效果展示顾客端(客户端)厨房端(客户端)3、收银员(客户端)......
  • 深入理解Nova组件与虚拟机生命周期管理
    在OpenStack学习旅程的第32天,我们深入探索了Nova这一核心组件,它是OpenStack云中负责计算资源管理和虚拟机生命周期控制的“大脑”。Nova不仅负责管理虚拟机的创建、调度、执行和销毁,还提供了丰富的API接口,使得用户能够灵活地与云基础设施进行交互。虚拟机生命周期管理虚拟机的生命......
  • python的os模块的常见函数及用途详解
    os模块提供了与操作系统进行交互的功能。它允许你执行许多常见的文件系统任务,如读取目录、处理文件、获取系统信息等。以下是一些os模块中常见的函数及其用途:目录操作os.getcwd():返回当前工作目录的字符串表示。os.listdir(path):返回指定目录下的文件和子目录列表。os.mkdir(......