2016-12-01 191 views
1

我們有幾個應用程序作爲多個模塊;我們一直在使用NetBeans。我正試圖將開發移到eclipse。maven依賴衝突僅在eclipse中

所有項目都是用Maven構建的。其中一個使用dbunit和POI。當我嘗試在eclipse中編譯它時,它給了我一個錯誤的方法簽名錯誤。 NetBeans無論是使用maven還是命令行構建都不會給我這個錯誤。

我發現,編譯器試圖使用一個版本的POI的編譯年紀比我們使用的一個。根據dbunit的maven存儲庫信息,特定版本的POI在編譯範圍中被指定爲dbunit的依賴項。我不明白爲什麼會將該版本的POI引入我的編譯中,因爲我正在使用dbunit,而不是編譯它。

我也不明白爲什麼它被拉到了日食,而不是爲了其他兩個編譯操作。

我已經看到了一些有關SO和eclipse bug報告網站的評論,關於eclipse如何僅使用一個類路徑,並且很難改變,並且沒有計劃改變。

如果那是真的,其他人怎麼處理這個?我無法在世界上(甚至在我的城市)使用具有與項目編譯衝突的編譯依賴關係的庫的唯一項目。是否有m2e補丁或eclipse解決方法,希望不涉及修改所有20個pom.xml文件?

回答

0

編譯依賴關係是可傳遞的。 Maven2Eclipse插件對樹庫只使用樹中的一個依賴項(可能與Maven不一樣)。

爲了安全起見,使用DbUnit的時候排除POI:如果您使用DbUnit的新版本2.4.3一樣

<dependency> 
    <groupId>org.dbunit</groupId> 
    <artifactId>dbunit</artifactId> 
    <version>...</version> 
    <exclusions> 
    <exclusion> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

,依賴於POI是可選的,也就是說不傳遞。

+0

'編譯依賴關係是傳遞性的嗎?爲什麼,爲了天堂的緣故?我的編譯沒有必要編譯dbunit。你是這麼說的,因爲我的構建使用了一個庫,並且該庫使用了另一個庫的特定版本,而第二個庫的其他所有使用都必須使用相同版本?因此,我們必須爲每個這樣的圖書館添加排除項目,通過像我們發現的這樣的試驗和錯誤來發現它們?這聽起來有點像Maven支持者聲稱這個工具被消除的「jar地獄」。那麼,這個「僅使用樹中的一個依賴項」僅僅是Maven2Eclipse? – arcy