maven如何動態(tài)統(tǒng)一修改版本號

前言

最近業(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

示例演示

項目層級如下

image.png

方案一: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、驗證

image.png

image.png

從截圖遮婶,可以看出達到預(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眠菇、驗證

image.png

在這里插入圖片描述

從截圖边败,可以看出達到預(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
image.png

此時查看idea登疗,會發(fā)現(xiàn)


image.png

項目版本號已經(jīng)發(fā)生改變排截,且產(chǎn)生一個pom.xml.versionsBackup文件,這個文件是用來回退版本用的辐益,其內(nèi)容如下


image.png

如果確認沒問題断傲,則可以執(zhí)行你本來要操作的步驟,比如打包或者發(fā)布智政,形如下命令
mvn clean package/deploy -DskipTests
image.png

從截圖认罩,可以看出達到預(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ù)介紹

image.png

其具體更多詳細介紹可以查看官網(wǎng)

http://www.mojohaus.org/versions-maven-plugin/index.html

總結(jié)

從本示例的業(yè)務(wù)場景來看,通過自定義變量雖然也可以達到效果疾忍,但是如果子模塊一多的話乔外,可能容易發(fā)生漏改現(xiàn)象。因此個人推薦使用mvn versions:set -DnewVersion=1.0-dev這種形式來進行修改

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末一罩,一起剝皮案震驚了整個濱河市杨幼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌聂渊,老刑警劉巖差购,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汉嗽,居然都是意外死亡欲逃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門饼暑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稳析,“玉大人,你說我怎么就攤上這事弓叛≌镁樱” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵撰筷,是天一觀的道長陈惰。 經(jīng)常有香客問我,道長毕籽,這世上最難降的妖魔是什么抬闯? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任井辆,我火速辦了婚禮,結(jié)果婚禮上画髓,老公的妹妹穿的比我還像新娘掘剪。我一直安慰自己,他們只是感情好奈虾,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廉赔,像睡著了一般肉微。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜡塌,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天碉纳,我揣著相機與錄音,去河邊找鬼馏艾。 笑死劳曹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的琅摩。 我是一名探鬼主播铁孵,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼房资!你這毒婦竟也來了蜕劝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤轰异,失蹤者是張志新(化名)和其女友劉穎岖沛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搭独,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡婴削,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了牙肝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唉俗。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惊奇,靈堂內(nèi)的尸體忽然破棺而出互躬,到底是詐尸還是另有隱情,我是刑警寧澤颂郎,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布吼渡,位于F島的核電站,受9級特大地震影響乓序,放射性物質(zhì)發(fā)生泄漏寺酪。R本人自食惡果不足惜坎背,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寄雀。 院中可真熱鬧得滤,春花似錦、人聲如沸盒犹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽急膀。三九已至沮协,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卓嫂,已是汗流浹背慷暂。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晨雳,地道東北人行瑞。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像餐禁,于是被迫代替她去往敵國和親血久。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容