[英]Why Maven doesn't install dependencies in multimodule project?
我的項目結構(多模塊)是這樣的
parent
projectA
projectB
... other modules
parent
實際上也有一個父(Spring Boot)。
我已經設置了一個Jenkins作業來編譯和測試每次提交,所以它運行:
mvn -f pom.xml clean install
一切正常。 ProjectB
依賴於ProjectA
(它類似於一個常見的類項目)並且是一個Spring啟動應用程序。 所以依賴信息是常規的:
<dependency>
<groupId>Group</groupId>
<artifactId>ProjectA</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
ProjectB
在Jenkins中有一個單獨的工作來構建可部署的jar文件並將其部署到服務器。 那么命令就是:
mvn -f ProjectB/pom.xml clean install antrun:run
這會失敗並顯示如下消息:
[WARNING] The POM for Group:ProjectB:1.0-SNAPSHOT is missing, no dependency information available
...
[ERROR] Failed to execute goal on project host-api: Could not resolve dependencies for project Group:ProjectB:1.0-SNAPSHOT: The following artifacts could not be resolved: Group:ProjectA:jar:1.0-SNAPSHOT...
現在我可以通過在ProjectA
目錄中執行mvn install
來解決這個問題 - 我已經對此進行了測試,它確實解決了這個問題。
但我的問題是我為什么要這樣做 ? 不應該Maven弄清楚應該在本地倉庫中安裝jar嗎?
提前致謝
運行命令時
mvn -f pom.xml clean install
然后maven使用reactor來計算模塊的順序,輸出如下:
[INFO] Reactor構建順序:
[INFO] ProjectA
[INFO] ProjectB
所以Maven首先構建項目A,然后構建項目B.
運行命令時:
mvn -f ProjectB/pom.xml clean install antrun:run
那你有問題; maven不是從父母那里開始的 - 它是從一個孩子開始的。 沒有告訴我們需要首先建立項目的層次結構。
如果要從maven多模塊項目構建單個項目,還應使用依賴項:
mvn -f pom.xml -pl ProjectB -am install antrun:run
哪里:
-pl ProjectB
是“項目列表”選項,它告訴maven構建這些特定項目 -am
是“也是make”選項,它告訴maven構建pl
中的項目所依賴的任何項目 運行構建時指定依賴項構建部件:
所以我認為規則是,首先建立父項目,然后在子項目上運行目標。
我的修復方法是首先在父項目上運行clean install
,然后在Jenkins中運行第二個構建配置-f ProjectB/pom.xml antrun:run
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.