首页 > 其他分享 >maven父子模块统一管理版本号

maven父子模块统一管理版本号

时间:2024-03-23 11:23:26浏览次数:31  
标签:Maven 版本号 maven flatten 模块 revision

背景:

在使用Maven多模块结构工程时,版本管理是一件很繁琐且容易出错的事情。每次升级版本号都要手动调整或者通过mvn versions:set -DnewVerion=xx命令去更改每一个子模块的版本号,非常的不方便

解决方案:

Maven官方文档说:自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符。

即在maven多模块项目中,可配合插件flatten-maven-plugin${revision}属性来实现全局版本统一管理。

环境说明

Maven Version:Apache Maven 3.6.0
Maven Plugin:flatten-maven-plugin
IDE: IntelliJ IDEA 2021.3
JDK: 1.8
POM文件:使用占位符${revision}

代码示例

父模块pom

在properties标签中定义revision标签:

<project>
    <modelVersion>4.0.0</modelVersion>
<groupId>com.sky.fly</groupId> <artifactId>fly-parent</artifactId> <version>${revision}</version> <packaging>pom</packaging> <properties> <!-- 全局版本控制,如果要修改版本号,修改此处即可--> <revision>1.0.0-SNAPSHOT</revision>
     ...
</properties> <modules> <module>fly-child1</module> ... </modules> <build> <plugins> <!-- 添加flatten-maven-plugin插件 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>flatten-maven-plugin</artifactId> <version>1.3.0</version> <inherited>true</inherited> <executions> <execution> <id>flatten</id> <phase>process-resources</phase> <goals> <goal>flatten</goal> </goals> <configuration> <!-- 避免IDE将 .flattened-pom.xml 自动识别为功能模块 --> <updatePomFile>true</updatePomFile> <flattenMode>resolveCiFriendliesOnly</flattenMode> <pomElements> <parent>expand</parent> <distributionManagement>remove</distributionManagement> <repositories>remove</repositories> </pomElements> </configuration> </execution> <execution> <id>flatten.clean</id> <phase>clean</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

关键点:
① 父子模块需遵循父子目录层次;
② 在父模块中引入插件flatten-maven-plugin;
③ 修改.gitignore文件,增加一行.flattened-pom.xml;
④ 不可混合使用${revision}和明确字符串版本号,若出现父子模块版本号混合使用${revision}和明确字符串形式如1.0.0.-SNAPSHOT,在mvn package会出现类似如下错误:

子模块配置

子模块可以直接使用${revision}指定父模块的版本:

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.sky.fly</groupId>
        <artifactId>fly-parent</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath> 
    </parent>

    <artifactId>fly-child1</artifactId>
    <packaging>jar</packaging>

</project>

install / depoy

执行install/deploy后,会将该模块的pom文件中的${revision}替换为实际的版本,每个模块下都会生成一个.flattened-pom.xml文件。这个文件可以再idea中设置隐藏不可见.

 

基于以上操作,每次版本号变更,只需要修改父模块POM文件中的revision即可

 

参考文献: https://www.cnblogs.com/Baker-Street/p/18090880

 

标签:Maven,版本号,maven,flatten,模块,revision
From: https://www.cnblogs.com/Baker-Street/p/18090880

相关文章

  • 银河麒麟系统V10上安装TTS语音模块,并使用C#调用进行语音播报
    银河麒麟系统V10上安装TTS语音模块,并使用C#调用进行语音播报系统版本什么是TTS需求背景环境部署更新系统安装版本包安装完成执行命令测试C#环境下调用语音播报系统版本什么是TTS从文本到语音TTS是“TextToSpeech”的缩写,即“从文本到语音”,是人......
  • 【python】(05)如何python中的logging模块记录日志信息
    系列文章回顾【python】(01)初识装饰器Decorator【python】(02)初识迭代器Iterator【python】(03)初识生成器Generator【python】(04)python中实现多任务并发和并行的区别【python】(05)如何python中的logging模块记录日志信息文章目录一.Logging模块的常用组......
  • 如何用pytorch调用预训练Swin Transformer中的一个Swin block模块
    1,首先,我们需要知道的是,想要调用预训练的SwinTransformer模型,必须要安装pytorch2,因为pytorch1对应的torchvision中不包含SwinTransformer。2,pytorch2调用预训练模型时,不建议使用pretrained=True,这个用法即将淘汰,会报警告。最好用如下方式:fromtorchvision.models.swin_trans......
  • 权限提升-Windows权限提升篇&溢出漏洞&宝塔面板Bypass&CS插件化&MSF模块化
    知识点1、Web到Win系统提权-权限差异原因2、Web到Win系统提权-溢出漏洞(MSF&CS)3、Web到Win系统提权-集成软件(哥斯拉模块Bypass)章节点:1、Web权限提升及转移2、系统权限提升及转移3、宿主权限提升及转移4、域控权限提升及转移基础点0、为什么我们要学习权限提升转移......
  • STM32G431RBT6按键模块04
    按键用法: 短按长按双击/三击按键电平变化:按下为0,弹起为1cubeMX中配置按键引脚并将其设置为上拉 设置定时器,时钟源,分频系数,重装载值 时钟源:InternalClock;Prescaler:79;CounterPeriod:9999; 这样的设置是10ms中断一次使能中断 interrupt.c&&inte......
  • 【Python模块】
    Python模块是一个包含Python定义和语句的文件。模块可以定义函数、类和变量。模块也可以包含可执行的代码。一个模块就是一个包含Python代码的文件,文件后缀是.py。模块可以被其他程序引入(import),以使用该模块中的函数等功能。这也是使用Python标准库的方法。一、Python模......
  • 批量上传本地Maven仓库jar包到Nexus私服
    创建import.sh脚本,写入以下内容#!/bin/bash#copyandrunthisscripttotherootoftherepositorydirectorycontainingfiles#thisscriptattemptstoexcludeuploadingitselfexplicitlysothescriptnameisimportant#Getcommandlineparamswhilegetopt......
  • Python中常用模块有哪些?
    1.importosos模块提供很多方法用来处理文件和目录 2.importsyssys模块提供了一系列运行环境的变量和函数,例如argv变量,argv变量是一个包含命令行参数的列表 3.fromminioimportMiniominio是一个对象存储服务,可以用来存储大量的数据,比如图片,视频,文档等 4.frommysq......
  • 【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(一)
    2021年全国职业院校技能大赛网络系统管理(样题1)模块B:Windows环境全国职业院校技能大赛执委会.技术专家组2021年03月目录一、赛题说明3(一)竞赛介绍3(二)密码3(三)竞赛时间3(四)竞赛注意事项3(五)竞赛结果文件的提交3二、项目任务描述4(一)基本配置4(二)拓扑图5三、......
  • 【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(二)
    2021年全国职业院校技能大赛网络系统管理(样题2)模块B:Windows环境全国职业院校技能大赛执委会.技术专家组2021年03月目录一、赛题说明3(一)竞赛介绍3(二)密码3(三)竞赛时间3(四)竞赛注意事项3(五)竞赛结果文件的提交3二、项目任务描述4(一)基本配置4(二)拓扑图5三、......