在我们开发过程中,测试已经测试完,我们需要将snapshot包转成release包,以前我们往往是这样操作的
1.修改pom的版本号为release,然后mvn deploy
2.提交代码,并打tag
3.修改代码版本为snapshot加1
这些操作非常繁琐,而且容易出错,特别是在maven多模块中,更是头疼,那么有没有简单的操作呢?
当然有,我们需要用到mvn release
mvn release:prepare
mvn release:rollback
mvn release:perform
prepare命令做了哪些操作:
1.检查项目是否有未提交的代码。
2.检查项目是否有快照版本依赖。
3.根据用户的输入将快照版本升级为发布版。
4.将POM中的SCM信息更新为标签地址。
5.基于修改后的POM执行Maven构建。
6.提交POM变更。
7.基于用户输入为代码打标签。
8.将代码从发布版升级为新的快照版。
9.提交POM变更。
perform命令做了哪些操作:
1.生成doc文档
2.删除release.properties等发布过程文件
3.迁出release:prepare生成的标签中的源代码,并在此基础上执行mvn deploy命令打包并部署构件至仓库。
首先需要配置好maven的settings文件,注意,这里配置的仓库Snapshot和Release仓的仓库类型也必须为这两种
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>******</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>******</password>
</server>
<profile>
<id>nexus</id>
<properties>
<altSnapshotDeploymentRepository>
nexus-snapshots::default::http://192.168.80.131:8081/repository/maven-snapshots/
</altSnapshotDeploymentRepository>
<altReleaseDeploymentRepository>
nexus-releases::default::http://192.168.80.131:8081/repository/maven-releases/
</altReleaseDeploymentRepository>
</properties>
</profile>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
一、配置scm,如果是多模块,在父pom中配置即可
<scm>
<developerConnection>scm:git:http://192.168.80.130/dray/base-service.git</developerConnection>
<tag>HEAD</tag>
</scm>
二、配置插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<tagNameFormat>v@{project.version}</tagNameFormat>
<generateReleasePoms>false</generateReleasePoms>
<arguments>-DskipTests</arguments>
</configuration>
</plugin>
三、预处理
mvn -B release:prepare -Dusername=dray -Dpassword=******
或者
mvn -B release:prepare-with-pom
-Dusername=dray -Dpassword=****** 为scm的账号,为了方便cicd可以动态指定
-B为非交互式执行,如果需要自定义指定发布的版本,tag名称,和发布后的版本,可执行
mvn --batch-mode -Dtag=my-proj-1.2 release:prepare \ -DreleaseVersion=1.2 \ -DdevelopmentVersion=2.0-SNAPSHOT
图为自动打的tags
四、回滚
mvn -B release:rollback
五、确定处理
mvn -B release:perform -DuseReleaseProfile=false
DuseReleaseProfile指定了不生成javadoc api文档,因为一般会报错,这里就直接不生成