前言
最近業(yè)務(wù)開發(fā)部門因為開發(fā)環(huán)境和測試環(huán)境共用一個maven私倉揣云,導致他們開發(fā)環(huán)境的API包和測試環(huán)境的API包發(fā)生了覆蓋現(xiàn)象棘脐。于是他們向我們部門提出一個需求斜筐,希望我們能幫他們實現(xiàn)或者提供這么一個方案,就是項目自動化構(gòu)建時蛀缝,項目的版本號能跟著環(huán)境變更顷链。比如是開發(fā)環(huán)境,則項目的API包版本就形如1.0-dev屈梁,如果是測試環(huán)境嗤练,則項目的API版本就形如1.0-test
示例演示
項目層級如下
方案一:mvn -Denv.project.version=1.0-env
注: env.project.version為自定參數(shù)變量,env為dev或者test
1俘闯、在maven項目的父級pom設(shè)置變量潭苞,形如下
<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真朗、執(zhí)行如下命令
mvn clean package -Denv.project.version=1.0-dev -DskipTests
如果要打包發(fā)布到私有倉庫此疹,則執(zhí)行
mvn clean deploy-Denv.project.version=1.0-dev -DskipTests
4、驗證
從截圖遮婶,可以看出達到預(yù)期的效果
方案二 maven的profile+自定參數(shù)變量
1蝗碎、在maven項目的父級pom設(shè)置變量,并添加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、執(zhí)行如下命令
mvn clean package -Ptest -DskipTests
如果要打包發(fā)布到私有倉庫臀防,則執(zhí)行
mvn clean deploy -Ptest -DskipTests
注:不指定-P默認為dev
4眠菇、驗證
從截圖边败,可以看出達到預(yù)期的效果
方案三(推薦) mvn versions:set -DnewVersion=1.0-dev
注: 使用該命令,項目無需做任何變動捎废。
直接執(zhí)行命令
mvn versions:set -DnewVersion=1.0-dev
如果要發(fā)布到私倉笑窜,此時要分兩次命令執(zhí)行,命令如下
mvn versions:set -DnewVersion=1.0-dev
mvn clean deploy -DskipTests
此時查看idea登疗,會發(fā)現(xiàn)
項目版本號已經(jīng)發(fā)生改變排截,且產(chǎn)生一個pom.xml.versionsBackup文件,這個文件是用來回退版本用的辐益,其內(nèi)容如下
如果確認沒問題断傲,則可以執(zhí)行你本來要操作的步驟,比如打包或者發(fā)布智政,形如下命令
mvn clean package/deploy -DskipTests
從截圖认罩,可以看出達到預(yù)期的效果
如果有問題想回退版本,則執(zhí)行
mvn versions:revert
進行回退女仰。不過能成功執(zhí)行該步驟的前提是沒有執(zhí)行
mvn versions:commit
且存在pom.xml.versionsBackup文件文件
如果不想產(chǎn)生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
參數(shù)介紹
其具體更多詳細介紹可以查看官網(wǎng)
http://www.mojohaus.org/versions-maven-plugin/index.html
總結(jié)
從本示例的業(yè)務(wù)場景來看,通過自定義變量雖然也可以達到效果疾忍,但是如果子模塊一多的話乔外,可能容易發(fā)生漏改現(xiàn)象。因此個人推薦使用mvn versions:set -DnewVersion=1.0-dev這種形式來進行修改