简介

很nb的插件。为什么?

一般开发,基于一个snapshot版本开发,开发完以后,发一个对应的release的包,然后再将代码版本更新为下一个snapshot版本。这些工作当然可以纯手工完成,但是可能比较痛苦,这里介绍的release插件就是干这个的。

使用

这里使用了github作为代码仓库,使用本地的一个nexus作为maven的私服。

1. 定义scm。scm是一款抽象了代码本版控制功能的maven官方插件,release插件正式通过该插件来与git或者svn等代码管理仓库交互,这里定义scm就是为了指定代码库的地址。下面是一个git的例子。

    <scm> <developerConnection>scm:git:https://github.com/xxx/xxx</developerConnection></scm>

一般有三个属性,对于开发来说,只定义这一个就行。

2. 插件配置;

例子:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.5.3</version><configuration><autoVersionSubmodules>true</autoVersionSubmodules></configuration></plugin>

这里作为例子配置这些就够了。有一个常用的配置:

<preparationGoals>clean verify</preparationGoals>

就是release的目标prepare需要执行哪些目标,默认就是上面的clean和verify。如果需要自定义可以特殊配置。

3. 仓库地址

这个就不贴了。

关于插件目标,主要是prepare和perform两个目标。

prepare:概括来说,就是perform之前需要执行的准备操作,主要是代码版本修改和提交。

具体来说呢?主要有以下几个:

1)检测是否有未提交的代码。

2)检测是否有snapshot依赖。

3)修改工程的版本号为release版本(提示输入)。

4)为当前代码打上一个git的tag(提示输入),提交代码至远程仓库。

5)修改pom为下一个snapshot版本(输入提示),提交至远程仓库。

注意,这里一共提交了两次代码,第一次是release版本,第二次是snapshot版本。

perform:发包。具体来说,perform会从远程代码库拉下刚才第一次提交的release版本的代码。然后内部再起一个maven build过程,执行一次deploy,将release包发至nexus仓库。那怎么找到release版本呢?下面会介绍。

下面看一个例子:

执行prepare之前一般需要执行clean,做一些清理工作。

执行之前,确保满足prepare的检查条件。

 mvn release:clean release:prepare

看下具体过程:

[INFO] Verifying that there are no local modifications...

[INFO] Checking dependencies and plugins for snapshots ...

What is the release version for "testMaven"? (com.liyao:testMaven) 2.0: : 
What is SCM release tag or label for "testMaven"? (com.liyao:testMaven) testMaven-2.0: : 
What is the new development version for "testMaven"? (com.liyao:testMaven) 2.1-SNAPSHOT: :

[INFO] Not generating release POMs
[INFO] Executing goals 'clean verify'...

[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven && git tag -F /var/folders/rl/tf7q0v610mx81mmrqzqfps0m0000gn/T/maven-scm-343870307.commit testMaven-2.0
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven && git push https://github.com/miracle2138/java.git refs/tags/liyao03

[INFO] Not removing release POMs

[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven && git push https://github.com/miracle2138/java.git refs/heads/master:refs/heads/master
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven
[INFO] Release preparation complete.

从这些步骤可以看到prepare做了哪些事。

执行完后,生成了一个release.properties文件。内容如下:

#release configuration
#Fri May 24 22:18:48 CST 2019
project.scm.com.liyao\:testMaven.developerConnection=scm\:git\:https\://github.com/xxx/java.git
scm.tagNameFormat=@{project.artifactId}-@{project.version}
scm.tag=testMaven-2.0
project.dev.com.liyao\:testMaven=2.1-SNAPSHOT
pushChanges=true
scm.url=scm\:git\:https\://github.com/miracle2138/java.git
preparationGoals=clean verify
remoteTagging=true
projectVersionPolicyId=default
scm.commentPrefix=[maven-release-plugin]
project.scm.com.liyao\:testMaven.tag=HEAD
project.rel.com.liyao\:testMaven=2.0
exec.snapshotReleasePluginAllowed=false
exec.additionalArguments=-P developemnt
completedPhase=end-release

这个文件是为后面的perform发包准备的,里面指定了perform该如何从远程仓库拉到release的代码。prepare推代码时要求输入一个Git的tag,tag就被记录在这个文件里,perform会读取这个文件里的tag,利用这个tag来拉取release代码。发完包就会删除。

下面执行perform:

 mvn release:perform  

这里只看一下拉取代码的过程:

[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target && git clone --branch testMaven-2.0 https://github.com/miracle2138/java.git /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target
[INFO] Executing: /bin/sh -c cd /var/folders/rl/tf7q0v610mx81mmrqzqfps0m0000gn/T/ && git ls-remote https://github.com/miracle2138/java.git
[INFO] Working directory: /var/folders/rl/tf7q0v610mx81mmrqzqfps0m0000gn/T
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target/checkout && git fetch https://github.com/miracle2138/java.git
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target/checkout && git checkout testMaven-2.0
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target/checkout && git ls-files
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Invoking perform goals in directory /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
确实使用了之前的tag。

后面就是一个完整的maven的deploy的过程。

发包结束。

【maven】maven-release-plugin 使用 (git)相关推荐

  1. Maven——Maven概述

    Maven概述 Maven是意第绪语,意为知识的积累,最初是为了简化Jakarta Turbine项目中的构建过程.有几个项目,每个项目都有自己的Ant构建文件,所有项目都略有不同.JAR已检入CVS ...

  2. Maven——Maven核心概念——史上最烂系列

    Maven 是目前最流行的自动化构建工具,对于生产环境下多框架.多模块整合开发有重要作用.Maven 是一款在大型项目开发过程中不可或缺的重要工具.(自己粗略写了一个SSM项目之后,回顾头来看这个,会 ...

  3. Maven: maven parent.relativepath point at wrong local pom

    Maven: maven parent.relativepath point at wrong local pom 参考:https://blog.csdn.net/qwfys200/article/ ...

  4. Maven版本管理-Maven Release Plugin插件

    一.什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基 ...

  5. Maven的发布plugin配置

    2019独角兽企业重金招聘Python工程师标准>>> <build><plugins><plugin><!-- 编译插件 -->&l ...

  6. Maven 插件(plugin)

    一.maven-resources-plugin 为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-re ...

  7. 【maven本地打包脚本】Git/Svn代码更新+maven打包流水线

    1.使用场景 因为现在项目组的项目未实现自动化发布,所以每次打包部署前各种问题频出,所以整了个简单的脚本,实现部署前的环境选择.代码更新.编译打包这三步骤. 因为部署启动需要到对应环境服务器的权限,还 ...

  8. maven出现No plugin found for prefix ‘help‘ in the current project and in the plugin groups [org.ap

    控制台输入 mvn help:system 下载相应包时 出现如下问题: Noplugin found for prefix 'help' in the current project and in ...

  9. Maven,MySQL优化,git

    插网线上网 https://baijiahao.baidu.com/s?id=1669575178786936197&wfr=spider&for=pc 1.Maven 引入自己的项目 ...

最新文章

  1. #if DEBUG vs. Conditional(“DEBUG”)
  2. java string输入_怎么让Java获取用户输入的字符串
  3. java系列:命令行启动mysql
  4. java语言程序设计期中考试_《java语言程序设计》期中试卷(答案).doc
  5. 报错解决:No module named tensorflow.contrib
  6. ORA-600 各个参数含义说明
  7. 【高并发高性能高可用之海量数据MySQL实战】-提纲目录-不断更新中...
  8. 如何给C盘扩容?亲测有效
  9. mw310r无线路由器怎么设置虚拟服务器,水星mw310r无线路由器接光猫怎么设置?
  10. vue样式初始化_前端Vue项目——初始化及导航栏
  11. xbox手柄适配器驱动_用于Windows的Xbox 360控制器无线接收器适配器
  12. opencv3.4.4 +contrib模块在win10+vs2017的编译和配置
  13. 转载:内外兼修:Oracle ACED熊军谈Oracle学习
  14. Java向pdf模板中写入数据并在模板之后添加新的表格内容
  15. 白领患上“网聊依赖症”
  16. 自动化处理--python读取word中表格内容
  17. 关于用js实现的日历记事功能
  18. 修复被劫持、篡改的IE主页
  19. Android国际化-中英文切换
  20. Echarts:重写toolbox的还原工具并监听click事件

热门文章

  1. levy 计算机辅助教学,计算机辅助教学在高校英语专业学术论文写作课程中应用.doc...
  2. 伟福怎么编译c语言,用C语言发声
  3. re python 引擎_Python-表名规则引擎-军刀集锦- re / configparser / xlsxwriter
  4. C#之AutoEventWireup
  5. 2023 年 04 月编程语言排行榜
  6. ES 的 unassigned shards 核心处理方案
  7. 前端搜索引擎优化(SEO)
  8. 小马哥-----高仿三星i8552刷机 拆机主板与开机界面图 14年新高仿
  9. RAID 5及RAID 10创建过程
  10. JVM - 程序计数器