2011-07-04 61 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 –