整合 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.mzph.cn/news/883902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PLC是如何扫描程序的?各位电气人都了解吗?

学习PLC必须要深刻理解PLC的扫描过程和执行原理&#xff0c;才能可靠无误的编写程序。通俗的讲PLC程序是从上往下&#xff0c;从左往右顺序循环扫描执行&#xff0c;它需要三个过程才真正输出实现外部动作。 第一步&#xff0c;先把外接的开关信号状态批量刷新到I输入映像区。 …

基于BLE的商业综合体室内定位导航系统的设计与实现

在大型商业综合体中&#xff0c;消费者常常因复杂的布局而感到困惑&#xff0c;如何高效、精准地引导顾客到达目标位置&#xff0c;成为提升购物体验的关键。BLE技术凭借其低功耗、高稳定性和广泛的设备兼容性&#xff0c;成为构建室内定位导航系统的理想选择。本文将详细探讨商…

CSS浮雕效果

效果图&#xff1a; HTML源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…

音视频入门基础:FLV专题(18)——Audio Tag简介

一、引言 根据《video_file_format_spec_v10_1.pdf》第75页&#xff0c;如果某个Tag的Tag header中的TagType值为8&#xff0c;表示该Tag为Audio Tag&#xff1a; 这时StreamID之后紧接着的就是AudioTagHeader&#xff0c;也就是说这时Tag header之后的就是AudioTagHeader&…

《掌控Linux:全面解析用户与组管理的奥秘》

目录 引言 用户与组管理 一、理解用户账户和组 二、Linux用户账户及其类型 三、超级用户权限 &#xff08;一&#xff09;Ubuntu的sudo命令 1、使用su命令临时改变用户身份 2、sudo命令用于切换用户身份执行 四、用户配置文件 &#xff08;一&#xff09;用户账户配置…

exp:CVE-2024-2961将phpfilter任意文件读取提升为远程代码执行(RCE)

该exp来自于https://raw.githubusercontent.com/ambionics/cnext-exploits/main/cnext-exploit.py在原基础上添加了一个小改动&#xff0c;使其更加通用 修改后的exp顶部资源失效则https://www.123865.com/s/kN7jVv-uccLd 之前的命令行参数为 使用方式是python exp.py url com…

玄机-应急响应- Linux入侵排查

一、web目录存在木马&#xff0c;请找到木马的密码提交 到web目录进行搜索 find ./ type f -name "*.php" | xargs grep "eval(" 发现有三个可疑文件 1.php看到密码 1 flag{1} 二、服务器疑似存在不死马&#xff0c;请找到不死马的密码提交 被md5加密的…

Thread类及线程的核心操作

一. Thread类的常见构造方法 1. Thread() Thread类无参的构造方法, 用于创建Thread类的实例对象. 2. Thread(String name) 带一个参数的Thread类构造方法, 创建一个线程对象, 并给其命名. [注]: 如果不专门给线程命名, 那么线程默认的名字就是Thread-0, Thread-1, Thread-…

云腾五洲的智联引擎是什么?

智联引擎是成都云腾五洲科技有限公司旗下的数智化转型服务平台&#xff0c;它提供云边协同的分布式物联网平台引擎服务。这一平台以其强大的功能和灵活性&#xff0c;为全行业提供数智化转型的新动力&#xff0c;帮助企业在数智化升级中实现持续增长。 核心能力 智联引擎的核心…

网络编程 TCP编程 Linux环境 C语言实现

所有基于数据传输通信的程序&#xff0c;都会被分成两种角色&#xff1a; 1. 服务端&#xff1a;又称为服务器 server 提供一种通信服务的进程 基本工作过程是&#xff1a;1> 接收请求数据 2> 处理请求数据 3> 发送处理结果 2. 客户端&#xff1a;client 使用一种通…

【Qt聊天室客户端】个人信息界面功能开发

1. 加载个人信息 从DataCenter数据类中拿到个人信息相关数据&#xff0c;然后显示到窗口中即可 个人信息界面中所有功能的实现&#xff0c;都是通过按钮触发操作&#xff0c;然后通过网络请求与后台交互完成信息更新 实现 2. 修改昵称 实现逻辑分析 获取输入框的昵称&#xf…

加油-加油

A 时刻注意A可逆&#xff0c;直接除去

十分钟Linux中的epoll机制

epoll机制 epoll是Linux内核提供的一种高效I/O事件通知机制&#xff0c;用于处理大量文件描述符的I/O操作。它适合高并发场景&#xff0c;如网络服务器、实时数据处理等&#xff0c;是select和poll的高效替代方案。 1. epoll的工作原理 epoll通过内核中的事件通知接口和文件…

60V恒流IC SL8443B内置功率MOS 支持2.5A电流 降压LED恒流驱动芯片

一、概述 SL8443B是一款高性能的LED恒流驱动芯片&#xff0c;具有60V的耐压能力&#xff0c;适用于高电压应用场景。它内置了5A&#xff08;或说5V&#xff0c;根据上下文理解为功率等级&#xff09;的功率MOS&#xff0c;可以减少外部元件数量&#xff0c;降低成本&#xff0…

获得淘宝app商品详情原数据 API 券后价获取API

item_get_app_pro-获得淘宝app商品详情原数据 通过此API可以实现通过商品id获取商品详情页数据&#xff0c;包括券后价、主图、详情等等。 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameStr…

得计算题者得天下!软考系统集成计算题详解!

软考中级系统集成项目管理工程师考试一共有《综合知识》和《案例分析》两门科目&#xff0c;而在这两科中都会涉及到计算题&#xff0c;特别是案例分析中&#xff0c;计算题每次考试都会占到一道大题&#xff0c;共25分&#xff0c;占到了科目总分的1/4&#xff0c;所以对于系统…

访问jenkins页面报错

安装fontconfig 即可 yum install fontconfig -y 安装完之后重启jenkins systemctl restart jenkins 再访问

JDBC2(防止sql注入,数据库连接池)

防止SQL注入 sql注入&#xff1a;利用sql语句的语法特点&#xff0c;应用层输入特殊格式&#xff0c;让原有的sql语句失效 创建表结构 并加入数据 create table login(lid int primary key auto_increment,lname varchar(20),lpwd varchar(20),lsex varchar(2),laddr varcha…

SpringBoot多线程

永线程池就不会内存泄漏&#xff0c;否则一直创建线程了&#xff08;如果业务量大很危险了&#xff0c;中断报警…&#xff1f;&#xff09; 【EnableAsync实现异步任务&#xff0c;简单用法】-CSDN博客 两种方法: 1、在启动类上加EnableAsync注解(Async默认的线程池是Simpl…

Linux——五种IO模型

目录 一IO基本理解 二五种IO模型 1五种IO模型示意图 2同步IO和异步IO 二非阻塞IO 1fcntl 2实现非阻塞IO 三多路复用 1select 1.1定位和作用 1.2介绍参数 1.3编写多路复用代码 1.4优缺点 2poll 2.1作用和定位 2.2介绍参数 2.3修改select代码 3epoll 3.1介绍…