2014-02-18 74 views
3

我有一個項目,這是在Java中6,這取決於項目B,這也是在Java中6覆蓋依賴

除了這些編譯編譯,我有兩個項目的依賴, C-6和C-7。 C-6是用Java編寫6項目C,而C-7被編譯在Java 7中

項目B具有相關項目C.在默認情況下,爲項目B引用項目C-7,這意味着它使用項目C的Java 7版本。有很多不同的項目引用項目B,它們都是用Java 7編譯的,所以這裏沒有問題。

但現在我有自己的項目中,這是用Java編寫6.現在,我想我的覆蓋B.依賴的依賴的問題是,即使我在項目中排除C-7,並添加依賴於C-6,當我在項目B中調用方法時,它將從C-7中獲得類。因此,我的應用程序崩潰,因爲它不兼容。

我該如何解決這個問題?我如何告訴我的依賴項B使用不同於通常依賴的依賴項C?請記住,很多項目都使用項目B作爲依賴關係,所以我不希望更改任何涉及更改其他項目的任何內容。

回答

0

在給定的依賴,你可以使用exclusions標籤排除指定的依賴。如果您隨後爲項目添加兼容的依賴項,那麼此庫將位於您的類路徑中,而不是排除的依賴項。我們始終使用此功能來更換日誌記錄庫。但是,這種技術的價值有限,因爲您放入的庫必須實現與您抽出的庫相同的界面。就像我說的那樣,這對伐木很有效,但對於其他大多數情況並不是很好。

這將是這個樣子:

<dependency> 
    <groupId>com.my.company</groupId> 
    <artifactId>B</artifactId> 
    <exclusions> 
     <exclusion>C7</exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>com.my.company</groupId> 
    <artifactId>C6</artifactId> 
</dependency> 
+0

我理解這一點。但是,如果在項目B上使用exclude和include標記來包含/排除C-6,則項目A可以訪問C-6功能,但是當您在項目B上調用方法時,它將調用C-7方法。我在帖子中也解釋了這一點。 – Joetjah

+0

你能解釋一點,因爲我有點困惑。據我瞭解:你有A - > B - > C7,並且你想A - > B - > C6。所以,如果你做A→C6&A→B x→C7,那麼這應該從類路徑中排除C7並將C6放在類路徑上。 ( - >是一個依賴項,x->是一個排除項)。所以,排除依賴於B,而不是A,這是我認爲你的問題所指出的。 –

+0

不完全。你說明我想要什麼是正確的。但問題是,我不能排除B中的任何東西,除非我可以用(默認)配置文件或類似的東西做一些事情。關鍵是,我正在研究項目A.還有一些團隊正在研究W,X,Y,Z ......,它們在項目A的依賴關係層次結構(也就是客戶端)方面都是一樣的。所以我可以'只是在項目B中排除,因爲這會打破所有其他應用程序。 – Joetjah