1. RELEASE的说明

1.1 snapshot与release的区别

大多数java开发的小伙伴都用过maven来对包进行管理。在自己写项目的过程中,对自己的项目也会进行groupdId,artifactId,version的配置。下面我们来对着3个配置进行简单说明。

  1. groupId:顾名思义,这个里面包含的是本项目属于哪一个group(即组织或公司)。一般我们会用公司或者自己的前几级包名来进行定义。

  2. artifactId:这个值定义的是本项目的名字。

  3. version:这个就是我们今天讲解的关键了。这个项目在maven进行发布以后的版本号。

一般,我们在刚开一个项目以后会将version定义为1.0-SNAPSHOT。snapshot单词从字面意思来说,是快照、照相的意思。为什么我们新的项目要使用SNAPSHOT呢?而不是我们引入的那些公共包的.RELEASE或者只有版本号什么都不带呢?这两个又有什么区别呢?听我慢慢道来: 一个项目在未上线发布之前会在测试环境或者开发环境中进行测试和调整,也有可能有需求变更和重构。所以,snapshot说明了,这个包还未固化其自身提供的服务。在使用带有snapshot的包的时候要特别小心。他很可能发生变化,不知道什么时候你之前使用的功能就会被这个包的维护人员干掉或者改变了。 而大家使用的类似Spring之类的公共开源包都是以RELEASE结尾的,这说明了当前这个版本号的包会稳定的提供功能服务,不会发生任何变化。如果需要变化只能通过修改版本号。

1.2 release的必要性

当我们的项目达到了当前的目标,在经过检测后不需要改变。这时我们就需要将SNAPSHOT版本打包成RELEASE版本。只有这样,使用这个包的用户才能放心的将这个版本的包放入自己的项目中使用。并且,不会担心这个功能包提供的功能会随时发生改变。 接下来我们就学习如何将在git中管理的功能包从snapshot打包成为release版本

2. scm的配置

scm是mvn为我们提供的,对版本管理软件进行管理和操作的插件。由于本指南只讲解打包过程,不会详细讲解本工具的具体概念和使用方式。

<project>
<scm><!--release包需要放入的nexus或者其他maven release包的仓库url地址--><url>http://xxxx/nexus/content/repositories/releases/</url><!--connection, developerConnection: 都是连接字符串,其中后者是具有write权限的scm连接 --><!--需要打包项目的git地址--><developerConnection>scm:git:http://xxxx/c-h5/portal-common-base.git</developerConnection><!--需要打包项目的git地址--><connection>scm:git:http://xxx/c-h5/portal-common-base.git</connection><!----><tag>HEAD</tag></scm>
</project>

3.maven-release-plugin的配置

<build><plugins><!-- 发布插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.5.3</version><configuration><!--git用户名--><username>xxxxx@shishike.com</username><!--git密码--><password>xxxx</password><!--mvn目标指令--><goals>-f pom.xml deploy</goals></configuration></plugin></plugins>
</build>

4.release的操作流程

4.1 第一步release:prepare

这条命令主要是做打包前的准备。

  1. 输入对应的release需要打包的版本等信息,如果不输入有默认的内容

  2. 将需要记录和准备的内容缓存到pom.xml目录下的release.properties文件中

  3. 在本地和远程库的GIT中打上对应版本的tag

在准备过程中还会run 单元测试等phase,如果没有异常的话可以继续最后一步。如果git还没有commit或单元测试失败会导致prepare失败,这时候你就需要到下面一个命令了。

4.2 后悔药release:rollback

如果在准备阶段发生错误,或者需要修改某些地方的话。就需要到这个命令了,这个命令执行以后会做以下这些事

  1. 删除线上git库tag,但是本地库tag没有被删除,需要手动使用git tag -d XXX进行删除。如果不将本地库中的tag删除将会导致prepare失败。

  2. 删除之前缓存在pom.xml统一目录下的配置

4.3 最后一步release:perform

如果确认无误了以后,就可以执行perform命令了。这个命令干了以下这些事:

  1. 验证代码合法性

  2. 将你之前的1.0-SNAPSHOT改为1.1-SNAPSHOT

  3. 将1.0版本deploy至scm配置的nexus release库中

  4. 将代码source。jar版本 javacode。jar打包上传至nexus库

恭喜,你已经把你的1.0-SNAPSHOT成功的打包成1.0的release版本了。同时你会发现你的pom.xml文件会自动的变成1.1-SNAPSHOT版本。虽然这一系列操作都可以通过手动完成。但是有这个工具的存在,免去了很多步骤。也规范了流程,何乐而不为呢。

一文学会 Maven 的版本发布相关推荐

  1. 一文学会Maven的版本发布

    点击蓝色"程序猿DD"关注我哟 来源:http://t.cn/EJ4Wowq 1. RELEASE的说明 1.1 snapshot与release的区别 大多数java开发的小伙伴 ...

  2. 想要成为Java架构师不容放过的知识—Maven的版本发布

    今天动力节点Java学院给大家带来Java架构师必学知识点,Maven的版本发布. 1. RELEASE的说明 1.1 snapshot与release的区别 大多数java开发的小伙伴都用过mave ...

  3. 【文档】软件版本发布说明

    背景说明:该项目产品是基于一款开源快速开发后台管理系统基础上根据公司业务需要逐步打造一款后台管理系统一站式快速交付平台,实现开箱即用(SAAS),线上交付,对内支持前后端交付,所见即所得.对外赋能支持 ...

  4. maven快照版本和发布版本

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  5. 使用自动化插件release来管理maven项目的版本发布

    在实际开发过程中,特别是现在推崇的敏捷开发,项目版本的发布非常频繁,有可能是一周就一个版本.对于多模块构建的项目,如何在发布时统一升级项目版本,如果都由人来操作,很容易就漏改某个模块的版本,导致出现问 ...

  6. ONLYOFFICE文档v7.3版本携新功能发布了!

    ONLYOFFICE 文档 v7.3 现已发布:新增字段填写接收人角色.SmartArt.全新安全性设置.查看窗口等功能 在我们最新版本的在线编辑器中现已提供高级表单.SmartArt图形插入.增强密 ...

  7. JEECG Framework 3.3.1 beta版本发布第一天战报(文档下载量破1300、...

    为什么80%的码农都做不了架构师?>>>    JEECG简介: JEECG(J2EE Code Generation) 是一款基于代码生成器的智能开发平台, 代码生成  +  On ...

  8. JEECG Framework 3.3.1 beta版本发布第一天战报(文档下载量破1300、代码下载量破700)

    JEECG简介: JEECG(J2EE Code Generation) 是一款基于代码生成器的智能开发平台, 代码生成  +  Online Coding在线开发 , 可以帮助解决Java项目 80 ...

  9. GitChat · 软件工程 | 一小时教你学会 Maven 项目的构建与管理

    GitChat 作者:梁鹏举 原文: 一小时教你学会 Maven 项目的构建与管理 关注公众号:GitChat 技术杂谈,一本正经的讲技术 Maven翻译成中文是"专家.内行".M ...

最新文章

  1. springboot~openfeign从JSON文件读取数据
  2. Document-对象属性和常用的对象方法
  3. 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用
  4. 监控linux时间不对,shell 计算故障时间 配合web监控
  5. springcloud 服务降级
  6. python爬虫(8)--Xpath语法与lxml库
  7. 天池-街景字符编码识别1-赛题理解
  8. Silverlight中使用MVVM(2)
  9. python是什么 自学-Python怎样自学?
  10. Ubuntu下安装opencv3.2.0,解决anaconda下的Python和安装opencv3.2.0冲突的问题
  11. 高度为5的3阶b树含有的关键字个数_B-树和B+树的应用:数据搜索和数据库索引...
  12. php 防止造假ip攻击,php防止网站被攻击的应急代码
  13. 软件开发常用的四种模式
  14. 极化码:信道极化原理(一)——两信道极化定理
  15. var_threshold
  16. excel IRR利率函数公式,算利率
  17. Typecho博客主题 - Joe主题再续前缘版
  18. iPics2Go: iPhone变身扫描仪
  19. 数据库锁的概念与介绍
  20. 湖北智禾网店指导:新开卖家必须要了解的淘宝交易流程及交易规则。

热门文章

  1. 重温Android四大组件(一)—Activity的生命周期
  2. 为什么要用GCD-Swift2.x
  3. 10-9-堆排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
  4. 在选择数据库的路上,我们遇到过哪些坑?(1)
  5. H3C 7506E基于时间的分时段上网的ACL
  6. 傻瓜教程:asp.net(c#) 如何配置authentication,完成基于表单的身份验证
  7. hls.js播放hls直播源
  8. 小白webpack进行nodejs 前端打包配置
  9. boost shared_ptr线程安全性
  10. python中 yield的用法和生成器generator的说明