我有一个依赖于 commons-httpclient [2.0](编译)的项目。
我想写一些 jbehave 测试 - jbehave-core 3.4.5 (test)。这两个依赖项都依赖于 commons-lang,但版本不同 - 1.0.1 和 2.5。
当我执行mvn package时,我在测试部分得到 [BUID FAILURE]。在surefire-plugin输出中我的测试用例有一个例外:
java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.substringBeforeLast(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
正如我在源代码中查看的那样——在 commons-lang 1.0.1 中——确实,没有 StringUtils.substringBeforeLast(...) 方法。为什么maven在测试中使用commons-httpclient(编译)而不是jbehave-core中的commons-lang?
我无法在 commons-httpclient 中排除这种冲突的依赖关系,因此它必须保持在编译时。
那么如何解决呢?- 测试中的 commons-lang 2.5 版本和编译时的 1.0.1。