簡體   English   中英

Maven 依賴項排除不起作用

[英]Maven dependencies exclusions not working

我正在使用enforcer的執行器插件,我看到一個我不太理解的行為,而且很危險。

假設我有沖突,因為依賴項Abla.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> 然后我將按照以下方式進行:

  1. 檢查mvn dependency:list哪個版本的依賴項在類路徑上。 它應該是<dependencyManagement>中指定的那個,除非你的依賴樹中沒有該依賴的版本。 如果你發現不止一個,那么 groupId 可能在某個時候發生了變化。 然后你需要排除。

  2. 檢查依賴的 scope 並驗證它確實是compile

  3. 然后打開依賴 jar 並查看此 jar 是否真的包含您獲得ClassNotFound的 class 。 通常類會隨着版本的變化而變化。

暫無
暫無

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

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