2013-10-15 159 views
0

我正在將一些遺留代碼移植到新版本。一個特定的模塊(slf4j),其中1.5x版本與1.6x和1.7x不兼容,我的問題是項目依賴的項目作爲jar包含在classpath中。有沒有辦法解決這個問題?刪除maven中的傳遞依賴項

+0

因此,您的項目取決於它本身依賴於1.5.x版本的SLF4J的東西?那是對的嗎? – Vidya

+1

是的,我打算使用1.6x和1.7x版本,它不向後兼容1.5x。每次我發起戰爭(我正在處理的項目)時,它都會失敗,因爲由於不同版本的不兼容而存在不兼容性,因爲傳輸依賴關係 – user1801279

回答

2

如果在POM Maven的直接依賴關係將會使用它,並省略任何傳遞依賴於同一工件,如這裏

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-core</artifactId> 
    <version>2.12.1</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.5</version> 
</dependency> 

駱駝核心具有傳遞性依賴SLF4J-API-1.6.6,但Maven會選擇slf4j-api-1.7.5

+0

我不確定這是否正確,我嘗試過新版本的slf4j添加到我的項目POM中。它仍然會導致兼容性問題。儘管這可能只適用於sl4j案件,但我不能肯定地說。 – user1801279

+0

在Eclipse中很容易驗證go pom「dependency hierarchy」選項卡 –

+0

yep mvn依賴關係:樹是我用來推斷依賴關係仍然在偷偷摸摸的方式,即使我已經將新版本鏈接到我的項目 – user1801279

0

我解決我的問題的方法是重新部署我的項目所依賴的項目。既然它是一個jar,我不得不以maven格式重新創建它,並添加必要的排除語句來阻止該級別的所有傳遞依賴。這可能不是最佳做法,但在我的情況下工作。我想用更新版本的項目是所有基於maven的排除標籤應該足夠了