maven-release-plugin是Apache官方提供帮助自动化项目版本发布的插件,可用于构建release版本项目,实现自动打tag、递增版本号、分发release版本jar包至仓库。
我们平常开发过程中,项目经常需要不断的进行迭代;一次正式的发布过程:
1、手动修改项目pom版本从1.0-SNAPSHOT到1.0;
2、对1.0打tag,例如:V1.0-release;
3、对上述tag发布正式版本号,mvn deploy;
4、修改pom从1.0升级到1.1-SNAPSHOT开发版本;
以上步骤需要手工操作非常繁琐,且容易出错;maven-release-plugin插件就是帮助我们节省大量重复,枯燥的工作。
nexus私服仓库等配置
<distributionManagement>
<repository>
<id>MPGGRCMirror-releases</id>
<name>Nexus Release Repository</name>
<url>http://ip:端口/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>MPGGRCMirror-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://ip:端口/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
scm配置git 远程仓库
<!--git 远程仓库配置-->
<scm>
<connection>scm:git:http://项目git地址</connection>
<url>项目git地址(不加'.git后缀')</url>
<developerConnection>scm:项目git地址</developerConnection>
</scm>
maven release 发布插件
<build>
<plugins>
<!-- maven release 发布插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<!-- prepare发布之前执行的mvn命令 -->
<preparationGoals>clean verify</preparationGoals>
<!-- 生成的tag格式 这里 @{} 而不是 ${} 可以防止project.version被其他方式覆盖 -->
<tagNameFormat>v@{project.version}-release</tagNameFormat>
<autoVersionSubmodules>true</autoVersionSubmodules>
<!-- 取消构建api文档,否则注释不规范会造成构建失败 -->
<useReleaseProfile>false</useReleaseProfile>
</configuration>
</plugin>
</plugins>
</build>
如果你所发布项目的打包类型为jar,在执行release:perform之后,不仅项目的主构件会被生成并发布到仓库中,基于该主构件的-sources.jar和-javadoc.jar也会生成并发布。 在执行mvn release:perform时默认会生成api文档,如果默写注释不符合规范的话会造成构建失败,可以加参数-DuseReleaseProfile=false取消构建api文档,或则需要根据规范书写注释。
关于插件目标,主要是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版本呢?下面会介绍。
版本号生成策略
1、default: 去掉SNAPSHOT作为release版本,递增一个版本号作为新的SNAPSHOT版本
2、OddEvenVersionPolicy: 将偶数版本作为release,奇数作为开发版
3、SemVerVersionPolicy: 语义化版本号:主版本号.次版本号.修订号 => breaking change.new feature.bug fix…
参考文档:
【maven】maven-release-plugin 使用 (git)_51CTO博客_maven-release-plugin
[Maven版本管理插件] - maven-release-plugin介绍与使用_maven插件版本_AgitatorZ的博客-CSDN博客