一次打包引發的思考,原來maven還能這么玩?


持續原創輸出,點擊上方藍字關注我

目錄

  • 前言
  • 依賴關系
  • 你會怎么做?
  • 必知的幾個參數
  • 總結

前言

昨天有一個讀者找我的交流工作心得,偶然間提到一個有趣的問題,如下:

大致的意思:公司最近在整多模塊開發,由於模塊之間相互依賴,每次打包都很煩,必須根據依賴關系逐一進行打包,有沒有省事的辦法呢?

其實玩轉Maven的朋友都知道,只需要一條命令即可解決問題。

依賴關系

假設有一個多模塊項目,父工程P中含有三個子模塊ABC,三個模塊有如下的依賴關系:

  1. A 依賴 BC
  2. B 依賴 C
依賴關系圖
依賴關系圖

父工程Ppom.xml如下:

.....
<modules>  <module>A</module>  <module>B</module>  <module>C</module> </modules> ..... 

A模塊的pom.xml如下:

....
<dependency>  <groupId>xxx.xxxx</groupId>  <artifactId>B</artifactId>  <version>xxxx</version> </dependency> ..... 

B模塊的pom.xml如下:

....
<dependency>  <groupId>xxx.xxxx</groupId>  <artifactId>C</artifactId>  <version>xxxx</version> </dependency> ..... 

C模塊的pom.xml如下:

....

你會怎么做?

現在產品需要上線項目A,你該如何打包?

最容易想到的則是分開打包,分別執行如下的命令:

mvn clean install C
mvn clean install B mvn clean package A 

以上三個模塊輪流打包,至少需要五分鍾以上吧,你不慌嗎?

慌的一批
慌的一批

重點來了,我只需要如下一條命令即可打包完成:

mvn clean package -pl A -am -P test -DskipTests=true

以上命令有什么高深的嗎?-P指定環境,-DskipTests=true跳過測試,但是-pl-am是什么?

答案肯定是在-pl-am這兩個參數了。

必知的幾個參數

從以上的例子中可以知道重要的就是-pl-am這兩個參數,那么是什么意思呢?如下:

參數 說明
-pl 可選,指定需要處理的工程,多個使用英文逗號分隔,取值是artifactId
-am 可選,同時處理 pl參數 指定模塊的依賴模塊
-amd 可選,同時處理依賴於 pl參數 指定模塊的模塊
-N 可選,表示不遞歸子模塊

怎么樣,理解了嗎?是不是有點晦澀難懂,哈哈....

what?
what?

別着急,下面通過幾個命令理解一下(全部在父工程P的根目錄下執行)。

  1. mvn clean install -pl A -am

對父工程P、子模塊A以及A模塊依賴的BC模塊執行mvn clean install操作。

這個命令執行成功后,可以看到PABC四個模塊全部安裝到本地了。

  1. mvn clean install -pl C -am

對父工程P、子模塊C模塊執行mvn clean install操作。

這個命令執行成功后,可以看到PC兩個模塊安裝到本地。

由於C模塊不依賴其他的兩個子模塊,因此AB模塊不會執行相關命令。

  1. mvn clean install -pl C -amd

對父工程P、子模塊C以及依賴於C模塊的BC模塊執行mvn clean install`操作。

這個命令執行成功后,可以看到PABC四個模塊全部安裝到本地了。

  1. mvn clean install -N

只會打包父工程P,它的子模塊將不會執行相關操作。

怎么樣?通過以上的命令應該理解了吧。

總結

隨着項目的體量逐漸增長,可不止上面的幾個模塊,學會以上幾個命令,提升的效率可不止一倍啊。


免責聲明!

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



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