2011-07-04 60 views
10

我有一個項目依賴於commons-httpclient [2.0](compile)。Maven 2 - 測試和編譯中的不同依賴版本

我想寫一些jbehave測試-jbehave-core 3.4.5(test)。 這兩個依賴依賴於commons-lang,但是在不同的版本中 - 1.0.1和2.5。

dependency

當我執行MVN包我得到了測試部分[打造專業化失敗。 沒有爲我的萬無一失,插件輸出測試用例的異常:

java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.substringBeforeLast(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; 

正如我看了源代碼 - 在公共琅1.0.1 - 事實上,沒有StringUtils.substringBeforeLast(...)方法。 爲什麼maven在commons-httpclient(compile)中使用commons-lang,而不是在jbehave-core中使用commons-lang?

我不能排除commons-httpclient中這個衝突的依賴關係,所以它必須保持編譯時間。

那麼這怎麼解決呢? - commons-lang 2.5版本在測試中,1.0.1在編譯時。

回答

6

嘗試使用不同的版本和範圍定義2個不同的<dependency>標籤。對於測試使用內部依賴關係中的標記<scope>test</scope>,使用<scope>compile</scope>進行編譯。

+0

這應該是測試不是測試

+0

它的工作!謝謝。在m2eclipse插件中,我有'(ommited for conflict witch 2.5)[編譯]'在commons-httpclient子類別中,但這可能是m2eclipse問題 – Xeon

+0

這對我不起作用,我不知道爲什麼 - http:// stackoverflow .com/questions/9364511/maven-different-dependency-version-in-test –