一个父模块下有几个子模块,父模块包含所有子模块的公共依赖。但是父模块的version从
1.0.0-SNAPSHOT
更新到1.0.1-SNAPSHOT
。每一个子模块都需要更新。
可以有下列命令,来完成多模块项目版本号的更新:
1. 版本的统一升级
统一升级:即父pom和子pom的版本通过插件自动的升级
1. 方法一:mvn versions命令
1.1 先更新parent工程的版本号
可以设置整个项目的版本号,在你需要设置新版本号,可以全局更新项目版本号。一般开发环境就设置成SNAPHSHOT版本,测试测完之后没问题设置成Release版。
mvn versions:set -DnewVersion=1.0.1-SNAPSHOT //更新整个项目版本
注:若是如果子模块与父模块本来就不一样了, 先运行mvn -N versions:update-child-modules
再更新父工程版本
1.2 把子模块的版本更新成parent工程的版本号
mvn -N versions:update-child-modules //更新所有的子模块继承的父模块版本号
执行后maven将会生成pom.xml
的一个备份:pom.xml.versionsBackup
1.3 提交
mvn versions:commit
确认升级版本无问题后,执行mvn versions:commit 确认升级,去掉备份的pom.xml.versionsBackup
1.4 回滚方案
若是上面操作出现问题,可以考虑设置回滚mvn versions:revert
在重新设置。
1.2 方法二:mvn release命令
父pom安装插件:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<!--官方文档 https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html-->
<!-- 是否允许带时间戳的 SNAPSHOT 依赖项。 默认false-->
<allowTimestampedSnapshots>true</allowTimestampedSnapshots>
<!--是否为子版本分配父亲版本号,默认false-->
<autoVersionSubmodules>true</autoVersionSubmodules>
<!--release:perform中参数 https://maven.apache.org/maven-release/maven-release-plugin/perform-mojo.html-->
<!--在执行mvn release:perform时默认会生成api文档,如果默写注释不符合规范的话会造成构建失败,可以加参数-DuseReleaseProfile=false取消构建api文档,或则需要根据规范书写注释。-->
<useReleaseProfile>false</useReleaseProfile>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
指定升级的版本:
mvn release:update-versions -D-DautoVersionSubmodules=false -DdevelopmentVersion=1.0.4-SNAPSHOT
其版本号只能以-SNAPSHOT结尾,命令执行之后,所有的版本号都变成了1.0.4-SNAPSHOT,不过有人hack了代码,在release:update-versions中增加了一个releaseVersion参数,可以设定正式版的版本号,项目地址为:https://github.com/ge0ffrey/maven-release,可以下载下来进行编译使用。
2. 发布
deploy snapshot版本到私服
发布所有模块, 在父工程下执行
mvn clean deploy -Dmaven.test.skip=true
发布单独子模块,及其依赖的子模块
mvn clean package deploy -pl xxx-xxx-? -am -Dmaven.test.skip=true -f pom.xml
在idea中,也可以使用
deploy操作.png
网友评论