前言
最近业务开发部门因为开发环境和测试环境共用一个 maven 私仓,导致他们开发环境的 API 包和测试环境的 API 包产生了笼罩景象。于是他们向咱们部门提出一个需要,心愿咱们能帮他们实现或者提供这么一个计划,就是我的项目自动化构建时,我的项目的版本号能跟着环境变更。比方是开发环境,则我的项目的 API 包版本就形如 1.0-dev,如果是测试环境,则我的项目的 API 版本就形如 1.0-test
示例演示
我的项目层级如下
计划一:mvn -Denv.project.version=1.0-env
注: env.project.version 为自定参数变量,env 为 dev 或者 test
1、在 maven 我的项目的父级 pom 设置变量,形如下
<groupId>org.example</groupId>
<artifactId>demo-parent</artifactId>
<packaging>pom</packaging>
<version>${env.project.version}</version>
<properties>
<env.project.version>1.0-SNAPSHOT</env.project.version>
</properties>
2、批改其子模块 pom
<parent>
<artifactId>demo-parent</artifactId>
<groupId>org.example</groupId>
<version>${env.project.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>module-biz</artifactId>
<parent>
<artifactId>demo-parent</artifactId>
<groupId>org.example</groupId>
<version>${env.project.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>module-api</artifactId>
3、执行如下命令
mvn clean package -Denv.project.version=1.0-dev -DskipTests
如果要打包公布到公有仓库,则执行
mvn clean deploy-Denv.project.version=1.0-dev -DskipTests
4、验证
从截图,能够看出达到预期的成果
计划二 maven 的 profile+ 自定参数变量
1、在 maven 我的项目的父级 pom 设置变量,并增加 profile,形如下
<properties>
<env.project.version>1.0-SNAPSHOT</env.project.version>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env.project.version>1.0-dev</env.project.version>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<env.project.version>1.0-test</env.project.version>
</properties>
</profile>
</profiles>
2、批改其子模块 pom
<parent>
<artifactId>demo-parent</artifactId>
<groupId>org.example</groupId>
<version>${env.project.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>module-biz</artifactId>
<parent>
<artifactId>demo-parent</artifactId>
<groupId>org.example</groupId>
<version>${env.project.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>module-api</artifactId>
3、执行如下命令
mvn clean package -Ptest -DskipTests
如果要打包公布到公有仓库,则执行
mvn clean deploy -Ptest -DskipTests
注:不指定 - P 默认为 dev
4、验证
从截图,能够看出达到预期的成果
计划三(举荐)mvn versions:set -DnewVersion=1.0-dev
注: 应用该命令,我的项目无需做任何变动。
间接执行命令
mvn versions:set -DnewVersion=1.0-dev
如果要公布到私仓,此时要分两次命令执行,命令如下
mvn versions:set -DnewVersion=1.0-dev
mvn clean deploy -DskipTests
此时查看 idea,会发现
我的项目版本号曾经产生扭转,且产生一个 pom.xml.versionsBackup 文件,这个文件是用来回退版本用的,其内容如下
如果确认没问题,则能够执行你原本要操作的步骤,比方打包或者公布,形如下命令
mvn clean package/deploy -DskipTests
从截图,能够看出达到预期的成果
如果有问题想回退版本,则执行
mvn versions:revert
进行回退。不过能胜利执行该步骤的前提是没有执行
mvn versions:commit
且存在 pom.xml.versionsBackup 文件文件
如果不想产生 pom.xml.versionsBackup 文件,则能够在父 pom 配置如下插件
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
</plugins>
</build>
指定 generateBackupPoms 为 false
参数介绍
其具体更多具体介绍能够查看官网
http://www.mojohaus.org/versions-maven-plugin/index.html
总结
从本示例的业务场景来看,通过自定义变量尽管也能够达到成果,然而如果子模块一多的话,可能容易产生漏改景象。因而集体举荐应用 mvn versions:set -DnewVersion=1.0-dev 这种模式来进行批改