[英]Maven dependencies exclusions not working
我正在使用enforcer
的執行器插件,我看到一個我不太理解的行為,而且很危險。
假設我有沖突,因為依賴項A
有bla.jar:1.0
並且與我的依賴項B
有沖突bla.jar:2.0
然后為了解決沖突,我從A
排除bla.jar:1.0
<dependency>
<groupId>com.foo</groupId>
<artifactId>A</artifactId>
<version>a.version.bla</version>
<exclusions>
<exclusion>
<groupId>com.omg</groupId>
<artifactId>bla</artifactId>
</exclusion>
</exclusions>
</dependency>
期望應用程序將獲得bla.jar:2.0
類路徑。 但是當我運行一些單元測試時,我看到 java proce3ss 根本找不到bla.jar
離子類路徑,並且在運行時給了我ClassNotFound
。
知道這里有什么問題嗎?
我在我的 pom 中定義了從上到下 B 然后是 A
請注意,排除不是解決依賴版本沖突的最佳方法。
最好的方法是使用<dependencyManagement>
。 它允許您設置一個版本來替換該依賴項的所有傳遞版本。
在您的情況下,我首先將排除更改為<dependencyManagement>
。 然后我將按照以下方式進行:
檢查mvn dependency:list
哪個版本的依賴項在類路徑上。 它應該是<dependencyManagement>
中指定的那個,除非你的依賴樹中沒有該依賴的版本。 如果你發現不止一個,那么 groupId 可能在某個時候發生了變化。 然后你需要排除。
檢查依賴的 scope 並驗證它確實是compile
。
然后打開依賴 jar 並查看此 jar 是否真的包含您獲得ClassNotFound
的 class 。 通常類會隨着版本的變化而變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.