前言

最近业务开发部门因为开发环境和测试环境共用一个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-devmvn 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这种模式来进行批改