当前位置: 首页 > article >正文

整合 flatten-maven-plugin 插件:解决子模块单独打包失败问题

整合 flatten-maven-plugin 插件:解决子模块单独打包失败问题

解决问题

我们来解决 Maven 多模块工程中,如果在父 pom 中定义了统一版本号 revision ,单独对某个子模块执行 clean package 打包失败的问题。

[ERROR] Failed to execute goal on project xiaohashu-auth: Could not resolve dependencies for project com.quanxiaoha:xiaohashu-auth:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at com.quanxiaoha:xiaoha-common:jar:0.0.1-SNAPSHOT: Failed to read artifact descriptor for com.quanxiaoha:xiaoha-common:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: com.quanxiaoha:xiaoha-framework:pom:${revision} (absent): Could not transfer artifact com.quanxiaoha:xiaoha-framework:pom:${revision} from/to huaweicloud (https://mirrors.huaweicloud.com/repository/maven/): status code: 400, reason phrase:  (400) -> [Help 1]

大概意思就是找不到其他模块的包,但是本地仓库中jar包确实有

失败原因

Could not transfer artifact com.quanxiaoha:xiaoha-framework:pom:${revision} from/to huaweicloud (https://mirrors.huaweicloud.com/repository/maven/)

提示我们无法从中央仓库下载 com.quanxiaoha:xiaoha-framework:pom:${revision}版本号不对劲 !!! 怎么是 ${revision} !!!

问题原因:在多模块项目中,如果使用到 revision 占位符进行版本号管理。此时,如果单独打包子项目时,是不能将 ${revision} 替换成父 pom 中的版本号的,最终打包时,就会提示找不到依赖。

引入 flatten-maven-plugin 插件

3.1 什么是 flatten-maven-plugin 插件?

flatten-maven-plugin 将项目的 pom.xml 文件转换成一个更简单的扁平版本,包含消费者所需的关键信息。这个扁平的 POM 文件会去除构建相关的配置和不必要的细节,留下一个更干净、简单的 POM,便于理解和管理。

使用该插件有如下优势:

  • 简化 POM 文件: 扁平化后的 POM 去除了构建插件、配置文件等构建过程中的不必要细节,使其更简单、更易于下游项目消费。
  • 提高可重复性: 通过扁平化,确保消费者获得一致且可重复的项目依赖和元数据,避免构建时的变异。
  • 减少大小和复杂性: 该插件有助于减少 POM 文件的大小和复杂性,便于理解和排除故障。对于包含复杂构建配置的大型项目尤其有用。
  • 优化分发: 在将项目分发到 Maven 中央仓库或其他仓库时,扁平化 POM 确保只包含必要的信息,避免由于构建时配置导致的潜在问题。

3.2 开始整合

编辑项目最外层的 pom.xml 文件,声明 flatten-maven-plugin 版本号并添加该插件:

    
    <properties>
        // 省略...
        
        <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>

        // 省略...
    </properties>
    
    // 省略...
    
    <build>
        <!-- 统一插件管理 -->
        <pluginManagement>
            <plugins>
                // 省略...
            </plugins>
        </pluginManagement>

        <plugins>
            <!-- 统一 revision 版本, 解决子模块打包无法解析 ${revision} 版本号问题 -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>${flatten-maven-plugin.version}</version>
                <configuration>
                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
                    <updatePomFile>true</updatePomFile>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

注意:这里 flatten-maven-plugin 是定义在 pluginManagement 节点外的,子模块无需再手动引入,直接让其全局生效。

插件添加完毕后,再次对父 pom 执行打包,可以看到,对应各模块 pom.xml 文件的同级目录下,额外生成了一个 .flattened-pom.xml 文件,打开该文件看一下,可以看到 ${revision} 被替换成了实际的版本号:

在这里插入图片描述

.xml文件,打开该文件看一下,可以看到${revision}` 被替换成了实际的版本号

再次对 xiaohashu-auth 子模块进行打包,maven 就会解析 .flattened-pom.xml 文件进行打包至此,多模块项目中,无法对子模块单独打包的问题,也就解决了~


http://www.kler.cn/a/377748.html

相关文章:

  • [数据结构从小白到大牛]第五篇:3分钟带你吃透双链表并用C语言模拟实现
  • 新华三H3CNE网络工程师认证—VLAN的配置
  • lora训练模型 打造个人IP
  • Android TextView自动换行文本显示不全解决
  • Qt入门基础分享
  • 单元测试(Junit)
  • 字符串左旋 (干货无废话)
  • flutter-防抖
  • 如何使用AdsPower指纹浏览器克服爬虫技术限制,安全高效进行爬虫!
  • 阿里国际2025届校园招聘 0826算法岗笔试
  • 【JavaEE初阶】深入理解TCP协议特性之延时应答,捎带应答,面向字节流以及异常处理
  • 修改 Docker 镜像默认存储位置的方法
  • 申请CNAS软件测试资质,如何选择测试工具最具性价比?
  • 三、Kafka集群
  • Vue常用的修饰符有哪些?
  • 基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
  • MATLAB FDATool工具箱入门教程
  • ubuntu20.04 加固方案-设置用户缺省UMASK
  • Vue 学习随笔系列十三 -- ElementUI 表格合并单元格
  • redis详细教程(5.AOP和RDB持久化)
  • 在 ubuntu20.04 安装 docker
  • 无人机拦截捕获/直接摧毁算法详解!
  • Dockerfile 增强新语法
  • A Consistent Dual-MRC Framework for Emotion-cause Pair Extraction——论文阅读笔记
  • 【JAVA】利用钉钉自定义机器人监控NACOS服务,实现实时下线通知
  • LabVIEW 离心泵机组故障诊断系统