[Maven] 使用Maven管理多模塊項目


 

我們現在通用的maven項目結構可能是這樣的:

   *parent module*

         *module A*

         *module B* 

大家遇到過以下幾個問題沒?

1.maven多個模塊之間互相依賴,一個模塊更新影響另一個模塊的運行;

2.maven 不小心把開發版jar包deploy到遠程倉庫,影響到了線上的正式環境;

3.團隊有人更新了SNAPSHOT版本,你rebuild之后無法運行;

一個父模塊下有幾個子模塊,父模塊包含所有子模塊的公共依賴,比如使用的日志系統;指定公共的模塊版本,比如數據庫驅動版本等等。

同時子模塊都繼承父模塊,就有個很常見的問題產生,如果父模塊的版本更新了,需要手動一個一個子模塊修改繼承的父模塊的版本號,例如下面的例子:

<!--父模塊版本信息-->

<version>1.1.0-SNAPSHOT</version>
    <modules>
        <module>pulldata-contract</module>
        <module>pulldata-common-service</module>
        <module>pulldata-notifyservice</module>
        <!--&lt;!&ndash;<module>pulldata-pullservice</module>&ndash;&gt;-->
        <module>pulldata-dataproviders</module>
        <module>pulldata-webservice</module>
        <module>pulldata-mqservice</module>
        <module>hbxj-dataproviders</module>
    </modules>

一個父模塊下有7個子模塊,如果父模塊的version從1.1.0-SNAPSHOT更新到了1.1.1-SNAPSHOT,每一個子模塊都需要一個個更新,其實說這么多就是為了引出maven的版本管理插件 Versions,

verisons提供了很多好用的功能,我們看下怎么解決剛才說的問題:

1,先安裝,很簡單,在父pom文件中加入如下代碼:

<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>2.7</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.7</version>
            </plugin>
        </plugins>
    </build>

2. 比如上面這個問題,我們可以直接運行一條maven指令:

mvn -N versions:update-child-modules  //更新所有的子模塊繼承的父模塊版本號

就可以把所有繼承的子模塊更新為和父模塊一致了。

3.還有很多好用的功能,

 3.1我們開發的版本一般用SNAPSHOT版本,線上版本用RELEASE版本,一般SNAPSHOT 沒有自定義或手動deploy的話,deploy的頻率是一天一次。

 為了防止你項目中依賴的SNAPSHOT版本的代碼因為團隊其他同事的deploy操作而變得不可用,可以先用

mvn versions:lock-snapshots 

鎖住當前項目中的snapshot依賴包,開發完成之后再用

mvn versions:unlock-snapshots

解鎖。

3.2 下面這個命令很有用,可以設置整個項目的版本號,在你需要設置新版本號,可以全局更新項目版本號。一般開發環境就設置成SNAPHSHOT版本,測試測完之后沒問題設置成Release版。

mvn versions:set -DnewVersion=1.0.1-SNAPSHOT //更新整個項目版本

3.3 其他命令參考文檔  

versions:set  
versions:lock-snapshots
versions:resolve-ranges
versions:unlock-snapshots
versions:update-child-modules
versions:update-parent
versions:update-properties
versions:set-property
versions:use-latest-releases
versions:use-latest-snapshots
versions:use-latest-versions
versions:use-next-releases
versions:use-next-snapshots
versions:use-next-versions
versions:use-releases

我一般主要用到的幾個還是上面提到的。

另外附一些我常用mvn指令

mvn clean package -pl  要編譯module目錄 -am -Pdev  -DskipTests // -pl 只編譯指定module 節省時間  -am 指定module依賴的模塊也編譯  

mvn clean install //安裝jar包到本地倉庫

mvn deploy  //deploy jar包到遠程倉庫

 

參考 https://danielflower.github.io/2015/03/08/The-Multi-Module-Maven-Release-Plugin-for-Git.html


免責聲明!

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



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