maven如何動態統一修改版本號


前言

最近業務開發部門因為開發環境和測試環境共用一個maven私倉,導致他們開發環境的API包和測試環境的API包發生了覆蓋現象。於是他們向我們部門提出一個需求,希望我們能幫他們實現或者提供這么一個方案,就是項目自動化構建時,項目的版本號能跟着環境變更。比如是開發環境,則項目的API包版本就形如1.0-dev,如果是測試環境,則項目的API版本就形如1.0-test

示例演示

項目層級如下

image.png

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

image.png
image.png
從截圖,可以看出達到預期的效果

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

image.png
在這里插入圖片描述
從截圖,可以看出達到預期的效果

方案三(推薦) 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

image.png
此時查看idea,會發現
image.png
項目版本號已經發生改變,且產生一個pom.xml.versionsBackup文件,這個文件是用來回退版本用的,其內容如下
image.png
如果確認沒問題,則可以執行你本來要操作的步驟,比如打包或者發布,形如下命令

mvn clean package/deploy -DskipTests

image.png
從截圖,可以看出達到預期的效果

如果有問題想回退版本,則執行

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

參數介紹

image.png
其具體更多詳細介紹可以查看官網

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

總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM