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

flatten-maven-plugin 统一版本管理插件

文章目录

  • 前言
  • 一、将所有pom引用的版本号统一由一个变量管理
  • 二、问题原因
  • 三、引入 flatten-maven-plugin 解决

前言

由于项目不规范,项目直接引用快照版本的jar包去发布。如果远程仓库没问题,那么引用的时候项目也不会有问题,但如果远程仓库的快照被删除那么 项目就会找不到依赖,只能由本地代码再推一分jar包上去。因为仓库对快照版本的jar没有备份机制。基于上述原因,每次jar有修改后,必须修改快照为release版本的jar。
项目结构一般会有子pom会引用父pom,若每次更新pom后,那么父pom的版本也需要修改才能推到远程,父pom的版本改后,所有引用他的子pom都需要修改。
固需要统一管理版本将项目的版本,将项目父pom、子pom版本抽成一个变量来管理,这样只需改一处,其它pom版本就会变部变更。

一、将所有pom引用的版本号统一由一个变量管理

一个子pom如下:

<parent>
        <artifactId>hub-message-parent</artifactId>
        <groupId>com.clock.hub</groupId>
        <version>${revision}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>message-service-facade</artifactId>
    <!--这里是暴露的jar版本引用,就是指向了 上面parent 的版本号-->
    <version>${project.parent.version}</version>

主pom中定义的变量:
这样每次只用修改这里的变量,就可以修改所有pom

<properties>
        <revision>4.3.12.RELEASE</revision>
 </properties>       

但实际上,子模块打包后生成的 pom 中引用父项目定义的属性的占位符不会被解析为实际定义的属性值。那么假如该子模块是一个 pom 这样的可以单独提供服务的模块,打包后推到了远端,其他人在引入后刷新依赖就会发生 Non-resolvable POM 异常。

二、问题原因

直接将上述子pom打包后,revision 占位符将不会被替换。
在另一个项目引入该pom的时候就会报错

三、引入 flatten-maven-plugin 解决

flatten-maven-plugin 解决
在父pom中引入插件如下:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>flatten-maven-plugin</artifactId>
    <version>1.1.0</version>
    <configuration>
        <!-- 是否更新pom文件,此处还有更高级的用法 -->
        <updatePomFile>true</updatePomFile>
        <flattenMode>resolveCiFriendliesOnly</flattenMode>
    </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>

重新打包子pom如下:

<parent>
        <artifactId>hub-message-parent</artifactId>
        <groupId>com.clock.hub</groupId>
        <version>1-message-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>message-service-facade</artifactId>
    <!--这里是暴露的jar版本引用,就是指向了 上面parent 的版本号-->
    <version>1-message-SNAPSHOT</version>

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

相关文章:

  • 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真
  • const的用法
  • 高速光模块中的并行光学和WDM波分光学技术
  • 【开源免费】基于Vue和SpringBoot的景区民宿预约系统(附论文)
  • HTML一般标签和自闭合标签介绍
  • OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?
  • 大厂案例——腾讯蓝鲸DevOps类应用的设计与实践
  • Unity URP 获取/设置 Light-Indirect Multiplier
  • 考研机试题:打印日期
  • 健康AI应用的逆袭:如何用“死亡时钟”撬动用户增长和媒体关注,实现应用榜快速排名第六
  • 【数据结构】_不带头非循环单向链表
  • 安全扫描Django项目解决存在敏感信息常见问题
  • redis主从集群中的哨兵机制
  • 探索 Web3 技术:如何推动数字身份的自主管理
  • 第4章 神经网络【1】——损失函数
  • css-设置元素的溢出行为为可见overflow: visible;
  • SpringBoot集成Flink-CDC,实现对数据库数据的监听
  • 解锁罗技键盘新技能:轻松锁定功能键(罗技K580)
  • NFT Insider #166:Nifty Island 推出 AI Agent Playground;Ronin 推出1000万美元资助计划
  • jQuery阶段总结(二维表+思维导图)
  • Vue 3 30天精进之旅:Day 03 - Vue实例
  • Linux(Centos、Ubuntu) 系统安装jenkins服务
  • Windows中如何查看Java进程对应的进程ID(PID),以及如何kill进程详解
  • 【线上问题定位处理】及【性能优化】系列文章
  • uniapp中h5的微应用解决办法
  • 中级运维工程师面试题汇总(含答案)