java - 同一 Artifact 的不同范围和传递依赖问题

标签 java maven maven-3

我有一个项目 A,它使用具有测试范围的库 L v1.0.0。项目 A 还依赖于项目 B(具有范围编译),而 B 间接依赖于库 L v1.0.0(具有范围编译)。

为什么项目 A 的库 L 的最终范围是“test”?它导致我在运行时出现 NotClassDefFoundError 。看来项目 A 对库 L 的依赖定义覆盖了对 L 的传递依赖的定义。

这里出了什么问题?我的项目 A 仅使用 L 进行单元测试,因此我使用“测试”范围定义依赖关系。但是,最后,我希望 L 位于我的类路径中,因为项目 A 依赖于项目 B 进行生产,而 B 需要(传递)库 L。

谢谢你帮助我

最佳答案

你使用Maven吗?在这种情况下,如果我没记错的话,Maven 将使用“最近的”定义来确定实际范围。在这种情况下,模块 A 指定了测试,并且 B 的传递范围被覆盖,因为 A 是最近的,因为您实际上位于 A 中:) 当您有多个模块之间存在依赖关系时,这会变得更加复杂。 常见的解决方法是在 <dependencyManagement> 的公共(public)父 Pom.xml 中定义所有依赖项(以及范围和版本)。标签。

关于java - 同一 Artifact 的不同范围和传递依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923787/

相关文章:

java - 从 eclipse 执行中读取 Maven 属性

maven - 自动检测 mvn3 以在多项目环境中拾取插件

java - 用于依赖图的 Maven 服务

java - Tomcat-Maven 401错误

java - 在哈希表中创建字符串的哈希值的时间复杂度

java - 我的 Char 数组在应该打印出 Char 时打印出数字

android - 离线 Maven 仓库中缺少 Gradle 插件

Maven插件开发-如何确保构建Maven 3.0.x而不是3.1.x?

java - 正则表达式 - Java - 匹配字符串 (012|123|234|345|456|567|678|789|890)

java - *和**区别