点击蓝色“程序猿DD”关注我哟

来源:http://t.cn/EJ4Wowq


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

  1. <project>

  2. <scm>

  3. <!--release包需要放入的nexus或者其他maven release包的仓库url地址-->

  4. <url>http://xxxx/nexus/content/repositories/releases/</url>

  5. <!--connection, developerConnection: 都是连接字符串,其中后者是具有write权限的scm连接 -->

  6. <!--需要打包项目的git地址-->

  7. <developerConnection>scm:git:http://xxxx/c-h5/portal-common-base.git</developerConnection>

  8. <!--需要打包项目的git地址-->

  9. <connection>scm:git:http://xxx/c-h5/portal-common-base.git</connection>

  10. <!---->

  11. <tag>HEAD</tag>

  12. </scm>

  13. </project>

  14. 复制代码

3.maven-release-plugin的配置

  1. <build>

  2. <plugins>

  3. <!-- 发布插件 -->

  4. <plugin>

  5. <groupId>org.apache.maven.plugins</groupId>

  6. <artifactId>maven-release-plugin</artifactId>

  7. <version>2.5.3</version>

  8. <configuration>

  9. <!--git用户名-->

  10. <username>xxxxx@shishike.com</username>

  11. <!--git密码-->

  12. <password>xxxx</password>

  13. <!--mvn目标指令-->

  14. <goals>-f pom.xml deploy</goals>

  15. </configuration>

  16. </plugin>

  17. </plugins>

  18. </build>

  19. 复制代码

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


推荐阅读

  • 成功离我们有多远?

  • 3台廉价服务器支撑200万TPS的消息中间件

  • 会写代码是你创业路上的包袱吗?

  • 数据库索引是什么?新华字典来帮你!

  • Star最多的Spring Boo教程继续更新了

号外:最近整理了之前编写的一系列内容做成了PDF,关注我并回复相应口令获取:

001 :领取《Spring Boot基础教程》

002 :领取《Spring Cloud基础教程》


2019

与大家聊聊技术人的斜杠生活

点个“好看”支持一下鸭

点鸭点鸭点鸭

↓↓↓

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

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

    1. RELEASE的说明 1.1 snapshot与release的区别 大多数java开发的小伙伴都用过maven来对包进行管理.在自己写项目的过程中,对自己的项目也会进行groupdId,art ...

  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. oracle imp dmp
  2. 当深度学习遇上图: 图神经网络的兴起 | 赠书
  3. 不同层级的Java开发者的不同行为
  4. 项目管理知识体系实战专家胡立
  5. spring常见面试问题_Spring面试问题
  6. java 自动生成文档_[原]java开发文档的自动生成方式
  7. linux svn启动失败,linux svn authorization failed错误
  8. maven伺服搭建_nexus搭建maven私服
  9. 软件开发计划_敏捷软件开发实践:估算与计划读书笔记125第23章 案例分析:Bomb Shelter Studio...
  10. php社工源码,社工库源码搜集
  11. doip 源码_DoIP技术(一)
  12. Android SDK Tools 历史版本下载
  13. window-批量创建文件夹
  14. 如何给域名前加上 www
  15. POJ-1392-Ouroboros Snake
  16. 什么是磁盘列阵技术?
  17. 常见五轴机床的机械结构形式讲解!
  18. 【解决】package ‘xxxx‘ is not in GOROOT
  19. MotionEvent 初探
  20. Java并发插件_五分钟,轻松掌握Java并发编程!

热门文章

  1. python3 asyncio loop 使用线程池原理
  2. msvc/gcc:中用#pragma指令关闭特定警告(warning)
  3. Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试
  4. golang 短连接和长连接 超时处理
  5. Android中显示输入的隐藏密码/Android多语系支持
  6. Android开发--实现对话框(AlertDialog)
  7. Qemu之Network Device全虚拟方案
  8. sql server datetime格式_为什么你SQL Server中SQL日期转换出错了呢?
  9. 数组中的逆序对,为什么要在第一个小于等于的时候计数?
  10. linux下搭建基于python的vim,Linux下搭建基于python的VIM-Go语言中文社区