簡體   English   中英

Maven 嘗試在“validate”階段下載多模塊依賴

[英]Maven tries download multimodule dependency on `validate` phase

從構建管道中,我想為諸如enforcer插件之類的東西運行validate階段。 但是,它不適用於多模塊項目,因為它會嘗試從項目內部的存儲庫下載依賴項。 然而, compile階段不會這樣做,但對我來說它不是一個選項,因為它太慢了。

pom.xml:

<module>lib</module>
<module>app</module>

庫/pom.xml

 <version>1.2.3</version>

應用程序/pom.xml

 <dependency>
   <artifactId>lib</artifactId>
   <version>1.2.3</version>
 </dependency>

所以,如果我做mvn compile它工作正常。

但是,如果我執行mvn validate ,它會在嘗試從 maven repo 下載 lib-1.2.3 時無法驗證app模塊。 出於某種原因,它現在看不到 lib 是一個鄰居依賴項。 為什么?

我創建了一個小倉庫: https : //github.com/kan-izh/so63963768

mvn compile

[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (enforce-no-snapshots) @ app ---
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ app ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\Workspace\repo\so63963768\app\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ app ---
[INFO] No sources to compile
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] parent ............................................ SUCCESS [1.612s]
[INFO] lib ............................................... SUCCESS [1.224s]
[INFO] app ............................................... SUCCESS [0.056s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

mvn validate

[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (enforce-no-snapshots) @ app ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] parent ............................................ SUCCESS [0.979s]
[INFO] lib ............................................... SUCCESS [0.015s]
[INFO] app ............................................... FAILURE [0.020s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.180s
[INFO] Finished at: Wed Sep 23 11:27:38 BST 2020
[INFO] Final Memory: 7M/34M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (enforce-no-snapshots) on project app: Execution
 enforce-no-snapshots of goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce failed: org.apache.maven.shared.dependency.graph.
DependencyGraphBuilderException: Could not resolve following dependencies: [com.so.q63963768:lib:jar:1.2.3 (compile)]: Could not resolve depend
encies for project com.so.q63963768:app:jar:1.2.3: Failure to find com.so.q63963768:lib:jar:1.2.3 in http://xxxxxxxxxxxxx.xx.xxxxxxxxxxxxxxxxx.
com:8081/repository/maven-public/ was cached in the local repository, resolution will not be reattempted until the update interval of nexus has
 elapsed or updates are forced -> [Help 1]

這是一個很好的問題,它顯示了 Maven 如何處理依賴項的一個小缺陷。 您需要知道,對於每個插件目標,您都可以定義是否應該解決依賴關系,以及針對哪個范圍。 (如果只有 poms 就足夠了,或者您還需要工件,那么會有一個小的區別) compiler:compile需要編譯期間所需的依賴項, compiler:testCompile需要測試期間所需的依賴項。 對於執行目標來說,這很棘手:目標本身不需要解析依賴項,大多數規則也不需要(例如 requireJavaVersion 或 requireMavenVersion),但有些規則需要,例如您嘗試執行的規則。 理想情況下,規則可以定義它們是否需要解析依賴項,但現在 API 不支持。

因此,您有幾個解決方案:始終使用 compile 運行,或者如果需要工件,則將執行塊綁定到 compile-pahse。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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