簡體   English   中英

為什么Maven不在多模塊項目中安裝依賴項?

[英]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嗎?

提前致謝

TL; DR告訴maven關於項目的結構。

運行命令時

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM