《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 https://juejin.im/post/5b8f6b355188255c8a05d2d3 「云逸_」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

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版本。虽然这一系列操作都可以通过手动完成。但是有这个工具的存在,免去了很多步骤。也规范了流程,何乐而不为呢。

文章目录
  1. 1. 1. RELEASE的说明
    1. 1.1. 1.1 snapshot与release的区别
    2. 1.2. 1.2 release的必要性
  2. 2. 2. scm的配置
  3. 3. 3.maven-release-plugin的配置
  4. 4. 4.release的操作流程
    1. 4.1. 4.1 第一步release:prepare
    2. 4.2. 4.2 后悔药release:rollback
    3. 4.3. 4.3 最后一步release:perform