2014-03-26 224 views
1

我正在構建和部署的項目正在進行。我想補充一點,使用JWebUnit的一些代碼,並使用以下Maven的代碼,使之在:引入依賴關係打破了現有的依賴關係?

<dependency> 
    <groupId>net.sourceforge.jwebunit</groupId> 
    <artifactId>jwebunit-htmlunit-plugin</artifactId> 
    <version>3.2</version> 
    <scope>test</scope> 
</dependency> 

Maven的似乎是解決這個罰款,它的引進(我用的IntelliJ的一切,和它現在出現在「Maven項目」選項卡的「依賴關係」下,也出現在「項目」選項卡的「外部庫」下)。

但是,當我將此依賴項放入時,IDE無法找到它(例如,如果我使用的是import net.sourceforge.jwebunit.junit.WebTester,則無法找到它)。

但更大的問題是,它實際上打破一些現有的代碼 - 我有使用org.apache.commons.httpclient.HttpClient一些JUnit測試,現在在Maven的安裝目標,我得到一個 NoClassDefFoundError - Could not initialize class該類。

如果我刪除了JWebUnit依賴項,則Maven安裝目標會成功退出。

我已經習慣了在引入新的依賴關係時看到依賴版本收斂的錯誤,我覺得像追逐這個'沒有類def定義'錯誤可能是一個紅鯡魚,但我不確定一般類型Maven中可能導致它的問題。

編輯:在HttpClient的拉動依賴代碼:

<dependency> 
    <groupId>commons-httpclient</groupId> 
    <artifactId>commons-httpclient</artifactId> 
    <version>3.1</version> 
</dependency> 

回答

1

jwebunit-htmlunit-plugin包括傳遞依賴它看起來像他們與你的一些相關性衝突的(可能是因爲他們是不同的版本)。

Maven將類路徑優先級放在早期聲明的工件上。嘗試將jwebunit移動到您的依賴項部分的末尾,或者至少在您拉入httpclient類的位置之後。或者,您可以手動排除某些傳遞依賴關係被拉入,但這可能很乏味。

至於你的IDE不允許在庫上導入,請記住你在test範圍內聲明瞭這個。生產類不能看到test依賴關係。

+0

好的建議,因爲我實際上遇到了依賴關係順序導致的問題;然而,在這種情況下,試圖將新的依賴關係放在開始處(最後開始)似乎沒有幫助。 該項目的pom結構也非常簡單 - 只有一個pom - 所以除了這個pom中的內容之外,不應該有其他任何東西被拉動。 (除非有可能將它放在某些依賴關係之間可能有幫助嗎?) – user3183922

+0

@ user3183922:你能否更新你的問題以顯示httpclient的Maven GAV?作爲參考,jwebunit拉入httpunit,它引入了httpclient 4.3.2。 –

+0

是的,我將不得不弄清楚結果是什麼...... – user3183922