java - Maven 2 - 测试和编译中的不同依赖版本

标签 java maven version maven-2

我的项目依赖于 commons-httpclient [2.0](编译)。

我想编写一些 jbehave 测试 - jbehave-core 3.4.5(测试)。 这两个依赖项都依赖于 commons-lang 但版本不同 - 1.0.1 和 2.5。

dependency

当我执行 mvn package 时,我在测试部分得到 [BUID FAILURE]。 我的测试用例在 surefire-plugin 输出中有一个异常(exception):

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 版本?

最佳答案

maven 3:

Maven 3 将尝试获取最近的依赖项,有效地确保在编译和测试阶段只使用编译或测试范围的依赖项之一。

(感谢 Vineet Reynolds)

Maven 2(旧):

尝试定义 2 个不同的 <dependency>具有不同版本和范围的标签。使用标签 <scope>test</scope>测试和 <scope>compile</scope> 的内部依赖关系用于编译。

关于java - Maven 2 - 测试和编译中的不同依赖版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575742/

相关文章:

java - 从另一个类访问 JFrame

maven - 将 maven-failsafe 与 fabric8-maven 结合使用以运行命中容器化数据库的集成测试

linux - 通过 shell 脚本增加文件中的版本号

objective-c 检测类是否可用于不同的操作系统版本

java - 使用适用于 Android 的 Firebase 发送电子邮件验证时未检查的分配警告

java - 如何抑制Jersey自动抛出的Jersey异常?

Maven:为什么要部署聚合 POM?

java - m2e看不到本地存储库中手动安装的jar

sorting - 如何更改 JIRA/Greenhopper 规划中发布版本的排序顺序?

java - 如何在 JavaFX 3D 中制作第一人称相机?