在实际开发过程中,特别是现在推崇的敏捷开发,项目版本的发布非常频繁,有可能是一周就一个版本。对于多模块构建的项目,如何在发布时统一升级项目版本,如果都由人来操作,很容易就漏改某个模块的版本,导致出现问题。本文要介绍的就是使用Maven插件来统一管理这些模块的版本,规范化这一过程。

  • 插件: maven-release-plugin

一、 环境与目标

1. 示例环境: 基于Maven构建的多模块项目

  • 父项目坐标

    <groupId>com.futao</groupId><artifactId>starter-fustack</artifactId><version>0.0.1-SNAPSHOT</version><name>starter-fustack</name>
  • 子模块列表:

    <modules><!--微信小程序--><module>fustack-wx-mini-program</module><!--自动配置--><module>fustack-autoconfiguration</module><!--常量--><module>fustack-consts</module><module>demo-test</module><!--数据库--><module>fustack-db</module><!--基础--><module>fustack-foundation</module><!--腾讯短信--><module>fustack-tencent-cloud-short-message</module><!--WEB支持--><module>fustack-web</module><!--权限控制--><module>fustack-auth</module><!--异常体系--><module>fustack-exceptions</module><!--Redis--><module>fustack-redis</module><!--工具包--><module>fustack-utils</module></modules>

2. 示例目标: 当前处于开发阶段,项目的版本为: 0.0.1-SNAPSHOT,即将需要发布该版本的正式版本: 0.0.1,且在正式版发布之后,下一个开发版本为: 0.0.2-SNAPSHOT。并同时将构建好的构件发布到maven私服。

二、 插件介绍

  • 插件: maven-release-plugin

  • 命令:

    • mvn release:prepare: 准备发布版本

  1. 检查项目是否有未提交的代码,有的话会报错。

  2. 检查项目是否有快照版本的依赖。

  3. 提示用户输入将要发布的版本号,并且自动将项目中pom文件中的版本号更新为用户输入的版本号。

  4. 提示用户输入一个tagName。

  5. 基于修改后的pom执行构建。

  6. 提交pom变更到VCS。

  7. 提示用户输入下一个开发版的版本号,并且自动将项目中pom文件中的版本号更新为用户输入的版本号。

  8. 提交pom变更到VCS。

  • mvn release:rollback: 回滚prepare阶段的操作,将pom回退至之前的状态并提交,但是不会删除prepare生成的tag标签。

  • mvn release:perform: 执行版本发布,执行mvn deploy命令打包并部署构件到远程仓库。

  • 三、 演示过程

    1. 添加release插件支持

    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><configuration><!--<tagBase>https://github.com/FutaoSmile/starter-fustack</tagBase>--><!--是否自动为子模块分配父版本。如果设置为false,将提示用户输入每个子模块的版本。--><autoVersionSubmodules>true</autoVersionSubmodules><!--tag标签名--><tagNameFormat>release-by-maven-${version}</tagNameFormat></configuration>
    </plugin>
    
    • 如果需要将构建好的构件发布到自己的maven私服,需要进行以下配置:

      • ~/.m2/settings.xml中添加maven私服的用户名和密码

      • 在项目的pom.xml文件中配置repository

    <distributionManagement><repository><id>对应settings中设置的id</id><url>需要上传到的maven私服地址</url></repository>
    </distributionManagement>
    

    2. 在pom.xml中设置SCM地址

    <scm><!--可读的SCM地址--><!--<connection>scm:git:https://github.com/FutaoSmile/starter-fustack</connection>--><!--可写的SCM地址--><developerConnection>scm:git:https://github.com/FutaoSmile/starter-fustack</developerConnection><!--可以在浏览器中访问的scm地址--><!--<url>https://github.com/FutaoSmile/starter-fustack</url>--><!--设置tagName--><tag>v-release-0.0.1</tag>
    </scm>
    

    3. 执行命令

    • mvn release:prepare

    • mvn relase:perform

    • prepare准备过程截图:

    • 执行版本发布截图:

    • 检查maven私服,构件是否上传成功

    image.png
    • 代码已自动更新至下一个开发版

    image.png

    # 源代码

    • https://gitee.com/FutaoSmile/starter-fustack

    • https://github.com/FutaoSmile/starter-fustack

    特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

    长按订阅更多精彩▼

    如有收获,点个在看,诚挚感谢

使用自动化插件release来管理maven项目的版本发布相关推荐

  1. svn更新maven项目报错_使用svn管理Maven项目的方法步骤

    0. 在svn服务器中新建一个仓库 在SVN服务器的安装目录下进入bin文件夹,双击VisualAVN Server.msc即可弹出VisualAVN Server窗口 先创建一个新的仓库,右键[Re ...

  2. select SCM type and URL 用m2e插件从svn导出maven项目

    1.用m2e插件从svn导出maven项目 2.下一步到这里,会出现一个警告,select SCM type and URL,你选择type发现下拉列表为空或者只有cvs,没有svn选项 3.点击右下 ...

  3. 使用codeplex管理WP7项目开发版本

    使用codeplex管理WP7项目开发版本 本篇文章介绍如何通过注册codeplex网站用户,创建codeplex项目,使用TFS连接codeplex,将WP7项目添加到TFS中,添加用户操作WP7项 ...

  4. 博云 BeyondCMP 云管理平台 5.6 版本发布

    近日,博云 BeyondCMP 云管理平台 5.6 版本发布正式发布.为了满足不同行业客户对云管理平台的多样化需求,在资源纳管.资源运维.平台综合展示.易用性友好性等方面进行了全面提升. 点击立即申请 ...

  5. 将maven项目打包并发布到maven中央仓库

    为什么要把我们的项目打包发布到maven中央仓库? 开源,为了将我们的项目(作为开源组件)开源出去,让全世界的开发者都可以使用maven将我们的组件引入到他们自己的项目中使用. 项目打包发布到mave ...

  6. intellij idea maven项目jdk版本会自动重置

    今天调试一个多模块Maven项目时,修改了pom后build老是报错,因为项目里面使用了jdk 8 的新特性 报错信息: Error:java: Compilation failed: interna ...

  7. IDEA—Maven项目JDK版本设置

    设置 Settings 中的 Java Compiler 和 Project Structure 中的 Language Level 中的 jdk 版本为自己目前使用的版本,否则会经常提示我们 jdk ...

  8. 团队作业——项目Alpha版本发布

    ---恢复内容开始--- https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1   https://edu.cnblogs.com ...

  9. 团队作业——团队项目Alpha版本发布

    该作业所属课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求链接    https://edu.cnblogs. ...

最新文章

  1. 为什么机器学习算法难以优化?一文详解算法优化内部机制
  2. How to Make a Computer Operating System
  3. linux配置caffe环境,最全caffe安装踩坑记录(Anaconda,nvidia-docker,linux编译)
  4. Android得到视频缩略图
  5. python医学科研中能做什么-一个博士生接受怎样的训练是完整、全面的科研训练?...
  6. Spring Boot快速开发企业级Admin管理后台
  7. 【Spring注解系列03】@Scope与@Lazy
  8. 同一个类 cannot be cast to_2021年动漫类年历推荐
  9. Qt创建Android服务
  10. input表单只允许输入大于0的整数
  11. 关于Keil4 转到 Keil5以后的一些错误解决
  12. 50年间,高水平论文数量国家排名是怎样变化的?| 可视化数据
  13. linux中_Linux基础知识(Linux系统、Linux中的链表)
  14. git学习笔记-(6-提交对象)
  15. c语言输出10000以内的回文数,输出10000以内的素数、回文数、回文素数
  16. java 自动点击按钮事件_JavaScript代码模拟鼠标自动点击事件示例
  17. java foxpro,在Visual FoxPro中更新顶部
  18. 微信分享网页 图标不显示
  19. 计算机只存在于计算机硬盘上,计算机病毒只存在于计算机硬盘上。()
  20. 天翼云linux远程密码不对,天翼云主机远程连接

热门文章

  1. Python 复数属性及操作介绍
  2. 必须安利的KubernetesDevOps工具
  3. Php单链表冒泡排序算法,冒泡排序(链表实现)
  4. poj3481(map的使用)
  5. 八种常见排序方法总结 C/C++代码实现
  6. python常用包下载_Python及其常用模块库下载及安装
  7. 面试使用计算机,面试相关之计算机基础
  8. android44投屏开发,ARDC(B1425)android投屏利器,开发好帮手.zip
  9. deepin中mysql数据库的连接_Python爬虫进阶教程(八):MySQL 数据库连接
  10. 5.6. Spring boot with Logging