在开发团队数据较多,有发布交集的迭代开发时,版本号的命名,依赖版本号的修改,会加重我们的工作负担。发布版本改版本号这种既没有技术含量,又费神的工作不应该让机器去完成吗?(依赖版本号写错,有时候会造成麻烦)接下来我将带你一起完成maven自动化部署。
版本变更自动化部署
一、引入自动化工具——maven release插件
- pom.xml文件中引入release插件:
<project>
...
<build>
<finalName>mvn-auto-release</finalName><!--自主命名-->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<tagBase>https://github.com/Luolanjiao/test-auto-release/tree/tags</tagBase><!--配置你的tag地址,我用的是gitub仓库-->
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
...
</project>
- 配置scm资源配置服务的信息,告诉release插件代码资源的位置。
<project>
...
<scm>
<connection>scm:git:https://github.com/Luolanjiao/test-auto-release.git</connection>
<developerConnection>scm:git:https://github.com/Luolanjiao/test-auto-release.git</developerConnection>
<url>https://github.com/Luolanjiao/test-auto-release.git</url>
</scm>
</project>
二、配置发布目的地——私服
2.1 告诉maven发布仓库的地址
在pom.xml文件中设置发布的私服地址,私服地址要对应上篇文章中启用的nexus服务的仓库地址。仓库分为几类,其中的release和snapshot是用来存放私有应用的,点击对应的仓库可以查看配置信息,具体看图1。
<project>
...
<distributionManagement>
<repository>
<id>releases</id>
<name>Releases</name>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshots</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
图1:nexus私服仓库信息
2.2 告诉maven下载构件的仓库地址
<repositories>
<repository>
<id>public</id><!--id是自定义的-->
<name>public</name><!--name是自定义的-->
<url>http://localhost:8081/nexus/content/repositories/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
三、全局设置maven私服仓库
在setting.xml中设置mirror为nexus仓库,以此可下载私服上的资源,且也可下载中央仓库的资源。因为私服找不到本地资源时会转为代理请求中央仓库。
- 先配置service访问信息,如果需要密码登录需要在services节点中配置;
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
- 配置镜像
<mirror>
<id>public</id>
<mirrorOf>*</mirrorOf>
<name>my nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>
四、运行自动化部署命令
1. prepare 命令
1.1 执行前项目版本状态:
版本处于快照版本—— xxx-SNAPSHOT
例如,我的项目版本正处于1.0.3-SNAPSHOT
1.2 命令执行:
mvn release:prepare
maven会提示你发布的版本号和新开发版本号,如果默认则直接回车,需要指定则输入指定的版本号后回车,效果如下图:
说明:
release:prepare命令执行包含了clean、resource、compile、testResources、testComplie、test、war
1.3 执行效果:
一是生成预备文件,二是将pom.xml文件中的版本号变更为了新的开发版本号。
1.3.1 生成预备文件
执行release:prepare命令后会自动生成执行清单文件(这两个文件一般不需要关心,因为最终执行perform命令后,这两个文件会被自动删除):
release.properties
pom.xml.releaseBackup
1.3.2 变更新的开发版本号
可以看到下图,版本号已经由"1.0.3-SNAPSHOT"变更为"1.0.4-SNAPSHOT"。
2. perform 命令
2.1 执行命令
mvn release:perform
2.2 命令执行的内容:
perform执行的最终目的是deploy。不仅与release:prepare一样执行了clean、resource、compile、testResources、testComplie、test、war阶段命令,还执行了install,deploy。以此看来,不需要先执行prepare命令也可以直接执行perform命令。
2.3 执行效果:
查看nexus私服仓库,可以看到刚刚deploy的1.0.3版本包。
以此部署完成。