Maven版本管理


 一.Maven項目打包的兩種方式

二.如何優雅地修改多模塊maven項目中的版本號 

三.一個項目使用另一個項目

 一.Maven項目打包的兩種方式:

1.依賴工具比如eclipse

2.使用命令行:

使用cmd進入到pom對應的目錄下:

執行:mvn  clean install 指令。

二.如何優雅地修改多模塊maven項目中的版本號?

當我們用maven建立一個項目時,包含了多個子model,我們想把一個子model打包deploy到私服上去,需要:

1.從父節點把整個project都deploy上去,這時別人才能拉去到你上傳的model。

2.保證整個project中所有model的version是一致的。

對於version,我們可以使用-SNAPSHOT這種方式,這樣所有model都是一致的,每次發布也不會有問題。但如果項目發展比較快,需要使用release版本發布,由於release版本每次deploy時版本號不能重復,所以就需要每次都修改父model的version和子model的parent中的version。這時,就會有以下問題需思考:

正式版不能重復發布,所以版本號每次上線都要更改
當項目中包含幾個子模塊時,通常我們想讓子模塊的版本號跟父項目的版本號一致
子模塊也會相互依賴
最容易解決的是問題3,maven有一個內置屬性${project.version}表示的是項目的版本號,當一個子模塊依賴其他子模塊時我們可以這樣寫:

<parent>
        <groupId>parent-groupId</groupId>
        <artifactId>parent-artifactId</artifactId>
        <version>1.0.0</version>
        <relativePath>..</relativePath>
    </parent>
    <artifactId>module-artifactId</artifactId>
    <dependency>
        <artifactId>other-module-artifactId</artifactId>
        <groupId>other-module-groupId</groupId>
        <version>${project.version}</version>
    </dependency>

子POM的groupId和version可以省略,這樣只要保證子模塊的版本號都一致就不會有問題了。但是<parent>標簽中的版本號還是要寫,不然會報錯,顯然maven沒有進化到這么智能的程度,或者可能會造成其他混亂而必須指定。而投機取巧地把<parent>標簽中的版本號換成${project.version}也沒有成功,因為必須先初始化<parent>標簽才能知道${project.version}是多少。

但是maven除了內置屬性之外還可以自定義屬性,我們可以在父pom中這樣寫:

<groupId>parent-groupId</groupId>
    <artifactId>parent-artifactId</artifactId>
    <version>${parent-version}</version>
 
    <properties>
        <parent-version>1.0.0</parent-version>
    </properties>

在子pom中這樣寫:

<parent>
    <groupId>parent-groupId</groupId>
    <artifactId>parent-artifactId</artifactId>
    <version>${parent-version}</version>
    <relativePath>..</relativePath>
</parent>

這樣寫達到了只修改一處的目的,但是在mvn install時會提示 <parent> 標簽中的version不是一個常量,未來的版本可能不支持,而且各個子模塊單獨mvn install時可能會失敗。

最終比較折中的解決方案是使用了maven的插件來解決,在父pom中這樣寫:

前邊廢話了一大堆,后邊的才是重點

<groupId>parent-groupId</groupId>
    <artifactId>parent-artifactId</artifactId>
    <version>1.0.0</version>
    <build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <generateBackupPoms>false</generateBackupPoms>
            </configuration>
        </plugin>
    </plugins>
    </build>

 

只需要執行mvn -N versions:update-child-modules則會自動把子POM的<parent>標簽中的version更新為和父POM一致。這樣修改一處然后運行一下執行一下命令就可以達到統一修改版本號的目的了。(在父model上執行后,所有子model中parent中的version都會修改)

mvn  versions:update-child-modules: 自動把子POM的<parent>標簽中的version更新為和父POM一致

mvn versions:set -DnewVersion=0.0.2-SNAPSHOT:更新的父及子Module的版本號都改成了0.0.2-SNAPSHOT.

mvn versions:commit :如果沒有在父pom用引入插件,Maven還會生成一個pom.xml.versionsBackup的備份文件,還需要mvn versions:commit提交

如果沒有在父pom用引入插件,

 <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <generateBackupPoms>false</generateBackupPoms>
            </configuration>
        </plugin>

Maven還會生成一個pom.xml.versionsBackup的備份文件,還需要mvn versions:commit提交

 或者執行

mvn versions:set -DnewVersion=2.0.0-SNAPSHOT -f pom.xml

然后項目中的依賴以及聚集的依賴版本都會被一起更新,也可以采用通配符來進行匹配

mvn versions:set -DgroupId=org.apache.maven.* -DartifactId=* -DoldVersion=2.* -DnewVersion=2.1.0-SNAPSHOT

 三.一個項目使用另一個項目

1.打成jar包引入項目依賴,詳見:

如何在Maven項目中引入自己的jar包

2.maven工程項目與項目之間的依賴方式

參考:https://blog.csdn.net/qq_28524127/article/details/80475398

 

首先看一下項目結構:

 

 

1、需要在父工程中把子工程為坐標引進來,同時標注父工程為pom工程:

 

 

2、同時在父工程中把子工程當作一個模塊引進來

 

 子工程的version可以寫成

<version>${project.version}</version>

 

3、需要在每一個子項目中通過parent標簽,標注為父工程,代表他需要依賴的父工程。同時擁有父工程的所有依賴:


問題:那這種形式的項目,怎么部署在Tomcat上啊?父工程也要部署在Tomcat上嗎?還是只需要子工程部署在Tomcat上就可以了?

 子工程部署在Tomcat上就可以了,會以jar的形式加載父工程


免責聲明!

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



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