Maven学习之批量修改项目版本号

前言

  • 适用场景

    Maven工程项目中有大量子模块时,需要批量修改pom版本号,借助mvn versions命令会把父模块更新到指定版本号,然后更新子模块版本号与父模块相同,可以避免手工大量修改和遗漏的问题。

  • 需求描述

    Maven工程项目多模块,修改指定模块及其所有子模块版本号,从而不影响与指定模块同层级模块项目版本号。

命令参数

  • 参数详解

    mvnversions常用参数

修改版本号

  • 进入主项目目录

    在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值