Maven多模塊項目打包前的一些注意事項(打包失敗)

一、

最近在打包Maven項目時遇到了點問題,這個項目是Maven多模塊項目,結構如下:

projectParent
├── xxxx-basic
├── xxxx-web1
├── xxxx-collector
└── xxxx-web2


projectParent 爲父項目,無任何代碼,就是個空殼,<packaging>pom</packaging>;
xxxx-basic 爲基礎項目,它依賴於projectParent,裏面含有一些model、dao、xml等,下面三個項目都依賴它,<packaging>jar</packaging>;
xxxx-web1 爲web項目,它依賴於xxxx-basic,<packaging>war</packaging>;
xxxx-collector 爲springboot項目,它依賴於xxxx-basic,可單獨啓動,不用管它。
xxxx-web2 爲web項目,它依賴於xxxx-basic,<packaging>war</packaging>;

 

二、

現在要發佈xxxx-web2到服務器,打包xxxx-web2時,報以下錯誤:

 

1 [WARNING] The POM for com.zc:xxxx-basic:jar:0.0.1-SNAPSHOT is missing, no dependency information available
2 [ERROR] Failed to execute goal on project xxxx-web2: Could not resolve dependencies for project com.zc:xxxx-web2:war:0.0.1-SNAPSHOT: Could not find artifact com.zc:xxxx-basic:jar:0.0.1-SNAPSHOT in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public) -> [Help 1]

 


從打印出來的日誌可以看出,無法找到 com.zc:xxxx-basic:jar:0.0.1-SNAPSHOT 在nexus-aliyun(阿里雲私服)

xxxx-basic明明是本地項目,爲什麼會去nexus-aliyun下載呢?


這裏解釋一下,Maven在下載依賴時會先在本地倉庫查找,如若未找到,則會去內網私服查找,如若仍未找到,再去遠程倉庫查找。
去本地倉庫看了一下,很明瞭,本地倉庫沒有xxxx-basic:jar:0.0.1-SNAPSHOT,內網私服也沒搭建,所以它直接去遠程倉庫找了(我們的遠程倉庫配置的阿里雲私服),直到最後未找到,報錯。

三、

先去發佈(install)xxxx-basic模塊到本地倉庫,再打包xxxx-web2

發佈(install) xxxx-basic模塊到本地倉庫 成功(如上圖)。

 

而打包 xxxx-web2 時又失敗(如上圖)。

1 [ERROR] Failed to execute goal on project xxxx-web2: Could not resolve dependencies for project com.zc:xxxx-web2:war:0.0.1-SNAPSHOT: Failed to collect dependencies at com.zc:xxxx-basic:jar:0.0.1-SNAPSHOT: Failed to read artifact descriptor for com.zc:xxxx-basic:jar:0.0.1-SNAPSHOT: Could not find artifact com.zc:projectParent:pom:0.0.1-SNAPSHOT in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public) -> [Help 1]


只看最後一句,無法找到 com.zc:projectParent:pom:0.0.1-SNAPSHOT在nexus-aliyun(阿里雲私服)

很顯然,和上一個錯誤一樣。xxxx-web2 依賴 xxxx-basic,而 xxxx-basic 依賴於projectParent,projectParent的pom在本地倉庫沒有,所以Maven又去遠程倉庫查找,未找到,報錯。

這樣再把父項目的pom發佈(install)到本地倉庫就可以了。在這裏需要注意的是,當 install 整個父項目時,它下面的 所有子模塊項目 也會一同發佈到本地倉庫。比較費時,有些模塊又不需要,放在本地倉庫還佔空間。

 

針對這種父項目 install 時,兩種解決方法:

1、直接install父項目,等待一會,全部發布成功後,在本地倉庫中查找到其餘不用的模塊,直接刪除,不再佔用磁盤空間。

2、在不需要發佈到本地倉庫的 '子模塊項目' 的pom.xml內加入

1 <properties>
2     <maven.install.skip>true</maven.install.skip>
3 </properties>

 

詳情可查看官網介紹(http://maven.apache.org/plugins/maven-install-plugin/install-mojo.html)

 


四、

發佈 (install) projectParent 父項目到本地倉庫,跳過其餘四個子模塊項目,成功。

 


projectParent模塊、xxxx-basic模塊在本地倉庫都有了,之後再去打包 xxxx-web2 就成功了。
(父模塊基本不會改,一般不需要重新發布;xxxx-basic在某些需求下,會改動,改動就重新發布,未改動無需重新發布;)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章