1. release插件完成自动发布
在maven—多模块项目 利用Maven插件修改工程版本号文章中可以通过插件去修改多模块项目的版本号,但是最终修改好的版本号还是需要使用deploy命令将其发布到私有的maven仓库。而Maven Release插件可以自动执行整个发布过程。
- 将当前的SNAPSHOT版本号修改为正式版;
- 然后在SCM服务器(SVN或git)上打一个该版本的tag,编译程序并自动生成jar包、source源码包和javadoc文档包然后发布到指定的maven服务器上;
- 最后将当前的版本号增加为新的版本号并修改为SNAPSHOT,这样就相当于一个自动构建的流程了。
文章来源
2. 配置
在父pom中,需要如下的配置:
<!--git 远程仓库配置-->
<scm>
<connection>scm:git:http://项目git地址</connection>
<url>项目git地址(不加'.git后缀')</url>
<developerConnection>scm:项目git地址</developerConnection>
</scm>
<!--构建配置-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<!--官方文档 https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html-->
<!-- 是否允许带时间戳的 SNAPSHOT 依赖项。 默认false-->
<allowTimestampedSnapshots>true</allowTimestampedSnapshots>
<!--是否为子版本分配父亲版本号,默认false-->
<autoVersionSubmodules>true</autoVersionSubmodules>
<!--release:perform中参数 https://maven.apache.org/maven-release/maven-release-plugin/perform-mojo.html-->
<!--发布配置文件将从未来版本的super pom中删除 默认false-->
<useReleaseProfile>false</useReleaseProfile>
</configuration>
</plugin>
</plugins>
</build>
<!--分发配置-->
<distributionManagement>
<repository>
<id>deploymentRepo</id>
<name>releases</name>
<url>http://somehost/repository/maven-releases/</url>
<uniqueVersion>true</uniqueVersion>
</repository>
<snapshotRepository>
<id>deploymentRepo</id>
<name>snapshots</name>
<url>http://somehost/repository/maven-snapshots/</url>
<uniqueVersion>true</uniqueVersion>
</snapshotRepository>
</distributionManagement>
如果需要跳过单元测试,可以加入参数 -Darguments="-DskipTests",直接使用-Dmaven.test.skip=true是无效的。
3. 命令
release:clean 清除一些插件生成的相关文件
release:prepare 准备发布,相当于发布前的准备。此命令会首先去去掉版本号中的SNAPSHOT标志符,在svn服务器生成一个指定版本的tag,编译并打包项目
release:perform 正式发布提交
release:rollback 回滚,如果prepare的过程中出现了错误可以执行此命令回滚prepare的操作。有两点需要注意:一是在svn服务器上创建的tag无法删除;二是如果执行了release:clean命令的话,无法进行回滚
默认情况下Release插件会将源码和javadoc进行打包,如果想自己控制的话需要在插件的configuration中设置useReleaseProfile为false,这样跟直接使用mvn deploy进行项目发布的情况一致了。