Maven多模块及version修改的实现方法
程序员文章站
2023-01-08 18:52:53
对于使用maven构建的java项目,通常聚合多个子模块项目。在版本迭代的过程中经常变更版本号,更新parent版本号,发现子模块版本号没有更新,需要一个个的手动去更新,太...
对于使用maven构建的java项目,通常聚合多个子模块项目。在版本迭代的过程中经常变更版本号,更新parent版本号,发现子模块版本号没有更新,需要一个个的手动去更新,太麻烦,且容易出错。
在版本更新之后,内部模块之间的依赖也需要变更,往往存在遗漏。
maven多个子模块项目
以上是一个基本的
主项目parent包
maven-multily-module/pom.xml
- 指定整个应用的dependencymanagement
- 定义项目的发布的仓库地址distributionmanagement
- 所有第三方依赖的版本号全部定义在properties下
- 所有内部模块依赖版本号统一使用**${project.version}**
- 指定所有的子模块modules
项目子模块pom.xml
app-api/pom.xml;app-dao/pom.xml;util/pom.xml;trade-core/pom.xlm;user-core/pom.xml
- 明确定义parent模块的artifactid,groupid,version
- 不要定义子模块的version(同parent保持一致)
- 子模块无需定义groupid
- 子模块所有的依赖包版本全部集成parent模块,即:子模块不得定义依赖包版本号
- 子模块需定义是否需要deploy到私服<maven.deploy.skip>true</maven.deploy.skip>
- 对于需要depoly的子模块【对外发布的,比如dubbo提供的api包】不应该依赖重量级jar包(比如:spring,mybatis等)
子模块packaging为pom
app-core/pom.xml
- 指定所有的子模块modules
- 无需定义groupid
- 明确定义parent模块的artifactid,groupid,version
以上定义规则保证了项目内部模块之间的依赖版本统一,第三方依赖包版本不冲突
maven聚合多个子模块项目版本号修改
虽然按照以上的规则定义模块及依赖,但是在版本迭代过程中需要修改对应的版本号,还是需要*pom的版本号,及每个子模块内部parent的版本号。
<parent> <groupid>com.maven.multily.module</groupid> <artifactid>parent</artifactid> <!--版本升级需要修改每个子模块 parent.version的值--> <version>1.1.0-snapshot</version> </parent>
这种手工修改方式极容易遗漏,导致项目内部模块版本依赖存在问题。
我们可以通过maven的插件方式来升级整个项目的版本号。方案如下:
在项目顶层pom中添加version插件
<plugin> <groupid>org.codehaus.mojo</groupid> <artifactid>versions-maven-plugin</artifactid> <version>2.3</version> <configuration> <generatebackuppoms>false</generatebackuppoms> </configuration> </plugin>
在项目根目录下执行以下命令修改版本号
// 设置新的版本号未1.2.0-snapshot mvn versions:set -dnewversion=1.2.0-snapshot
以上命令会将maven-multily-module/pom.xml版本修改为1.2.0-snapshot,且会修改所有子模块内 parent的version为1.2.0-snapshot。所以建议子模块不设置version,自动从parent继承version即可
相关参数说明
参数 | 默认值 | 说明 |
---|---|---|
allowsnapshots | false | 是否更新-snapshot快照版 |
artifactid | ${project.artifactid} | 指定artifactid |
generatebackuppoms | true | 是否备份pom文件 |
groupid | ${project.groupid} | 指定groupid |
newversion | 设置的新版本号 | |
nextsnapshot | false | 更新版本号为下一个快照版本号 |
oldversion | ${project.version} | 指定需要更新的版本号可以使用缺省‘*' |
processallmodules | false | 是否更新目录下所有模块无论是否声明父子节点 |
processdependencies | true | 是否更新依赖其的版本号 |
processparent | true | 是否更新父节点的版本号 |
processplugins | true | 是否更新插件中的版本号 |
processproject | true | 是否更新模块自身的版本号 |
removesnapshot | false | 移除snapshot快照版本,使之为release稳定版 |
updatematchingversions | true | 是否更新在子模块中显式指定的匹配版本(如/项目/版本)。 |
参考 命令介绍
项目demo代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
原生JS实现获取及修改CSS样式的方法
-
Maven多模块及version修改的实现方法
-
PHP接口多继承及tarits实现多继承效果的方法
-
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
-
首席架构师推荐:金融保险领域数字化转型实践--如何优雅地修改业务中台中分层应用Maven多模块的版本号?(命令导入式)
-
Maven 修改tomcat运行版本和端口的实现方法
-
Android实现ViewPager多页面滑动切换及动画效果的方法
-
php+mysqli预处理技术实现添加、修改及删除多条数据的方法,mysqli多条_PHP教程
-
php+mysqli预处理技术实现添加、修改及删除多条数据的方法_PHP
-
原生JS实现获取及修改CSS样式的方法