【maven】maven-release-plugin 使用 (git)
简介
很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)相关推荐
- Maven——Maven概述
Maven概述 Maven是意第绪语,意为知识的积累,最初是为了简化Jakarta Turbine项目中的构建过程.有几个项目,每个项目都有自己的Ant构建文件,所有项目都略有不同.JAR已检入CVS ...
- Maven——Maven核心概念——史上最烂系列
Maven 是目前最流行的自动化构建工具,对于生产环境下多框架.多模块整合开发有重要作用.Maven 是一款在大型项目开发过程中不可或缺的重要工具.(自己粗略写了一个SSM项目之后,回顾头来看这个,会 ...
- Maven: maven parent.relativepath point at wrong local pom
Maven: maven parent.relativepath point at wrong local pom 参考:https://blog.csdn.net/qwfys200/article/ ...
- Maven版本管理-Maven Release Plugin插件
一.什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基 ...
- Maven的发布plugin配置
2019独角兽企业重金招聘Python工程师标准>>> <build><plugins><plugin><!-- 编译插件 -->&l ...
- Maven 插件(plugin)
一.maven-resources-plugin 为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-re ...
- 【maven本地打包脚本】Git/Svn代码更新+maven打包流水线
1.使用场景 因为现在项目组的项目未实现自动化发布,所以每次打包部署前各种问题频出,所以整了个简单的脚本,实现部署前的环境选择.代码更新.编译打包这三步骤. 因为部署启动需要到对应环境服务器的权限,还 ...
- 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 ...
- Maven,MySQL优化,git
插网线上网 https://baijiahao.baidu.com/s?id=1669575178786936197&wfr=spider&for=pc 1.Maven 引入自己的项目 ...
最新文章
- #if DEBUG vs. Conditional(“DEBUG”)
- java string输入_怎么让Java获取用户输入的字符串
- java系列:命令行启动mysql
- java语言程序设计期中考试_《java语言程序设计》期中试卷(答案).doc
- 报错解决:No module named tensorflow.contrib
- ORA-600 各个参数含义说明
- 【高并发高性能高可用之海量数据MySQL实战】-提纲目录-不断更新中...
- 如何给C盘扩容?亲测有效
- mw310r无线路由器怎么设置虚拟服务器,水星mw310r无线路由器接光猫怎么设置?
- vue样式初始化_前端Vue项目——初始化及导航栏
- xbox手柄适配器驱动_用于Windows的Xbox 360控制器无线接收器适配器
- opencv3.4.4 +contrib模块在win10+vs2017的编译和配置
- 转载:内外兼修:Oracle ACED熊军谈Oracle学习
- Java向pdf模板中写入数据并在模板之后添加新的表格内容
- 白领患上“网聊依赖症”
- 自动化处理--python读取word中表格内容
- 关于用js实现的日历记事功能
- 修复被劫持、篡改的IE主页
- Android国际化-中英文切换
- Echarts:重写toolbox的还原工具并监听click事件
热门文章
- levy 计算机辅助教学,计算机辅助教学在高校英语专业学术论文写作课程中应用.doc...
- 伟福怎么编译c语言,用C语言发声
- re python 引擎_Python-表名规则引擎-军刀集锦- re / configparser / xlsxwriter
- C#之AutoEventWireup
- 2023 年 04 月编程语言排行榜
- ES 的 unassigned shards 核心处理方案
- 前端搜索引擎优化(SEO)
- 小马哥-----高仿三星i8552刷机 拆机主板与开机界面图 14年新高仿
- RAID 5及RAID 10创建过程
- JVM - 程序计数器