2011-03-02 58 views
1

我有我有行家以下循環依賴的情況下:如何在maven中排除循環棄用的依賴關係而不會完全依賴關係?

JAR A version 1.1 depends on JAR B version 1.0 
JAR B version 1.1 depends on JAR A version 1.0 

出於某種原因,我不知道,Maven的把所有的4個JAR文件:一個1.0,一個1.1,B 1.0和B 1.1,這會導致類路徑衝突。

這真的很糟糕。我已經要求兩個JAR的開發者來解決這個問題,但是我不能簡單地坐着等待他們決定修復這個問題的那一天。

我嘗試這樣做:

<dependency> 
    <groupId>groupA</groupId> 
    <artifactId>artifactA</artifactId> 
    <version>1.1</version> 
    <type>pom</type> 
    <scope>compile</scope> 
    <exclusions> 
     <exclusion> 
      <groupId>groupB</groupId> 
      <artifactId>artifactB</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>groupB</groupId> 
    <artifactId>artifactB</artifactId> 
    <version>1.1</version> 
    <type>pom</type> 
    <scope>compile</scope> 
    <exclusions> 
     <exclusion> 
      <groupId>groupA</groupId> 
      <artifactId>artifactA</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

結果是行家排除所有的JAR文件,就好像沒有依賴關係,並將該項目不編譯因爲有遺漏的類。

因此,除了要求兩個JAR開發人員解決此問題外,我該怎麼辦?如何導入兩個新的依賴項,同時忽略兩個舊的依賴項?

回答

1

務實的解決方案將是重新聲明作爲提供的不需要的依賴關係,例如:

<dependency> 
    <groupId>groupA</groupId> 
    <artifactId>artifactA</artifactId> 
    <version>1.0</version> 
    <scope>provided</scope> 
</dependency> 

我不特別喜歡以這樣的方式使用所提供的,因爲它的葉子在編譯時的依賴性,並可能導致不必要的編譯依賴性,但我沒有看到你的情況;(

+0

這是我在實踐中做的 – DaShaun 2011-03-03 15:22:57

+0

我可以聲明兩個版本的相同依賴項插入到類路徑中嗎 – 2011-03-06 15:28:38

+0

否,據我所知,maven對此感到灰心 - 而且在實踐中你不應該這樣做,因爲上課會犯規無論如何(最有可能按字母順序),從第一次遇到的依賴關係(jar文件)加載,所以你不會從中受益。 – 2011-03-08 10:41:34