一、背景
在 SpringCloud 微服務框架下,會存在多個模組。當我們需要對其中某一個服務打包的時候,需要將該服務依賴的模組一起打包更新,如果專案比較小的話我們可以直接將專案中的所有模組進行 clean install 即可。
但是當專案執行一段時間後,專案中的程式碼量會變得很多,每個模組的打包時間也會越來越長,將所有模組進行打包的方法已經不再可取,那麼 如何才能在打包的時候只將所需的模組及其依賴的模組進行打包呢?
二、解決方案
我們使用 mvn 命令搭配 -pl 和 -am 這兩個引數即可解決上面的問題:
-pl 引數:或 --projects,指定了要構建的模組列表,Maven 將僅對這些指定的模組進行構建(多個用英文逗號分隔);
-am 引數:或 --also-make,表示如果目標模組依賴於其他模組,那麼在構建目標模組之前,Maven 會先構建所有直接依賴於目標模組的子模組。
注意: -am 並不會遞迴地構建所有簡介依賴的模組,之構建直接依賴於目標模組的子模組。
命令示例:
mvn clean package -am -pl com.demo:springboot-demo
三、補充
3.1 提出疑問
看完上面這種方式,可能會有這樣一個疑問:Maven 打包的時候不應該是先從本地倉庫拉取麼?我這裡使用 mvn package 而不是 mvn install,透過 -am 打包好的直接依賴會打到新的目標模組包中嗎?
3.2 解答
透過 -am 打包好的直接依賴會自動打到新的目標模組包中的。
因為,當所有的直接依賴模組都成功構建完成後,Maven 會對目標模組執行打包操作(如 jar、war 等),並 將直接依賴模組的輸出結果作為當前模組的依賴庫進行引用和打包。
原文連結:https://blog.csdn.net/qq_33204709/article/details/135708014