Maven学习之批量修改项目版本号
前言
-
适用场景
Maven工程项目中有大量子模块时,需要批量修改pom版本号,借助mvn versions命令会把父模块更新到指定版本号,然后更新子模块版本号与父模块相同,可以避免手工大量修改和遗漏的问题。
-
需求描述
Maven工程项目多模块,修改指定模块及其所有子模块版本号,从而不影响与指定模块同层级模块项目版本号。
命令参数
-
参数详解
修改版本号
-
进入主项目目录
在pom.xml文件所在目录
批量修改全部模块版本号
-
执行命令
IDEA的控制台执行
mvn versions:set -DoldVersion=* -DnewVersion=1.5.0-SNAPSHOT -DprocessAllModules=true -DallowSnapshots=true
-
报错信息
Unknown lifecycle phase ".5.0-SNAPSHOT". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are:...
-
解决方案
命令不正确,经尝试发现使用""双引号括起来参数可正常执行,不确定是否跟IDEA控制台有关。
mvn versions:set -DoldVersion=* -DnewVersion="1.5.0-SNAPSHOT" -DprocessAllModules=true -DallowSnapshots=true
批量修改指定模块及其下属模块版本号
-
执行命令
mvn versions:set -DgroupId=cn.org.nbsp -DartifactId=hello-sub -DoldVersion=* -DnewVersion=1.5.0-SNAPSHOT -DprocessAllModules=true -DallowSnapshots=true
-
报错信息
Failed to execute goal org.codehaus.mojo:versions-maven-plugin:2.2:set (default-cli) on project kmq: Execution default-cli of goal org.codehaus.mojo:versions-maven-plugin:2.2:set failed.: NullPointerException
-
解决方案
查询资料发现,跟插件版本有关,执行插件版本执行更新命令。
mvn -B build-helper:parse-version org.codehaus.mojo:versions-maven-plugin:2.4:set -DgroupId="cn.org.nbsp" -DartifactId="hello-sub" -DoldVersion=* -DnewVersion="1.5.0-SNAPSHOT" -DprocessAllModules=true -DallowSnapshots=true
或者在pom文件中引入插件
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <!-- 使用2.4版本可以指定模块更新版本,高版本测试不行,如2.6、2.9等 --> <version>2.4</version> </plugin>
回退版本号
-
执行命令
mvn versions:revert
确认版本号
-
执行命令
mvn versions:commit
其他
编译安装
mvn clean install -Dmaven.test.skip=true -U
-
mvn命令支持带参数
-U :该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态。
-Dmaven.test.skip=true :不执行测试用例,也不编译测试用例类。
-DskipTests :不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
多环境打包
-
命令介绍
mvn clean install -P test
-
pom.xml里的build和profiles
<build> <!-- 打包后文件名称:项目名-环境-版本 --> <finalName>${project.artifactId}</finalName> <resources> <resource> <directory>src/main/resources</directory> <!-- 开启过滤替换功能--> <filtering>true</filtering> <includes> <!-- 项目打包完成的包中只包含当前环境文件 --> <include>application.yml</include> <include>application-${profileActive}.yml</include> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build> <!-- 多环境配置方案 --> <profiles> <profile> <id>local</id> <properties> <profileActive>local</profileActive> </properties> <activation> <!-- 默认情况下使用本地开发配置 如 打包时不包含 -p 参数--> <activeByDefault>true</activeByDefault> </activation> </profile> <!-- 打包命令package -P test --> <profile> <id>test</id> <properties> <profileActive>test</profileActive> </properties> </profile> <!-- 打包命令package -P prod --> <profile> <id>prod</id> <properties> <profileActive>prod</profileActive> </properties> </profile> </profiles>
-
效果验证
项目打包后只保留application.yml、application-test.yml
application.yml里的@profileActive@也会被替换成test
替换settings文件
-
命令脚本
mvn -s /etc/maven/settings.xml clean install -Dmaven.test.skip=true
使用依赖releases版本
-
命令脚本
mvn clean install -Dmaven.test.skip=true versions:use-releases
参考链接
-
Versions maven plugin 修改版本
https://blog.csdn.net/GGBomb2/article/details/78316068
-
maven项目上线,一条命令轻松修改版本号
https://blog.csdn.net/qianshangding0708/article/details/106580797
-
Maven多模块及version修改
https://blog.csdn.net/onupway/article/details/86512836
-
build-helper-maven-plugin:无法执行目标 org.codehaus.mojo:versions-maven-plugin:2.2:set
https://stackoverflow.com/questions/46190590/build-helper-maven-plugin-failed-to-execute-goal-org-codehaus-mojoversions-mav
-
Plugin Documentation
https://www.mojohaus.org/versions-maven-plugin/plugin-info.html -
我在工作中是这样使用Maven
https://juejin.cn/post/6844904201579937800