java - 如果 Maven 依赖项传递冲突,是否可以在中介期间将 Maven 依赖项标记为 "lower priority"?

标签 java maven dependency-management

我正在创建一个测试帮助程序库,该库使用来自其他几个项目的固定装置。其中一些项目实际上可能会使用此测试助手作为自己测试的一部分。这似乎是循环的,但事实证明这并不是由于多模块设置所致;只有主服务模块的测试才会使用测试帮助程序库,而客户端、模拟器和固定装置模块则不受该依赖关系的影响:

- project foo
  - foo-service
    -> test-helper-lib (in <scope>test</scope> only)
  - foo-client
  - foo-emulator
  - foo-fixture
- project bar
  - bar-service
  - bar-client
  - bar-emulator
  - bar-fixture
- project test-helper-lib
  - test-helper-lib
    -> foo-client
    -> foo-fixture
    -> bar-client
    -> bar-fixture

现在,更准确地说,每个服务的测试确实将其客户端、模拟器和固定装置添加为依赖项。所以它更像是:

- project foo
  - foo-service
    -> test-helper-lib (in <scope>test</scope> only)
    -> foo-client
    -> foo-emulator
    -> foo-fixture
  - foo-client
  - foo-emulator
  - foo-fixture
- project bar
  - bar-service
    -> bar-client
    -> bar-emulator
    -> bar-fixture
  - bar-client
  - bar-emulator
  - bar-fixture
- project test-helper-lib
  - test-helper-lib
    -> foo-client
    -> foo-fixture
    -> bar-client
    -> bar-fixture

那么您可以看到,...之间可能存在传递依赖冲突...

- foo-service
  - test-helper-lib
    - foo-client

- foo-service
  - foo-client

在这种情况下,在 foo-service 中,我总是希望排除 test-helper-lib 的 foo-{client,emulator,fixture} 版本,因为我希望 foo-service 测试使用最新的客户端,模拟器和固定装置,而不是与 test-lib-helper 一起打包的旧版本。 我可以做一些事情来“标记” test-helper-lib 具有较低优先级的传递依赖项吗?

最佳答案

首先,我猜您的设置中并没有真正遇到您所描述的问题。 Maven 有一个“最近的依赖项获胜”规则。作为您的test-helper-lib依赖关系似乎比其他依赖关系更加嵌套,它们会松散。

不过,一般来说,我不太喜欢 Maven 依赖中介。一旦你的依赖树变得拥挤,就很难找出真正“获胜”的版本。我建议大量使用 <dependencyManagement>它允许您控制传递依赖项的版本(无需实际向依赖项树中添加您可能不需要的内容)。

对于您的具体问题:不,您不能对版本号给予更高或更低的优先级。

关于java - 如果 Maven 依赖项传递冲突,是否可以在中介期间将 Maven 依赖项标记为 "lower priority"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878833/

相关文章:

java - Spring 启动。 Bean 依赖于服务

java - 确定 MQ 消息队列何时为空(所有消息均已读取)

java - 使用 Maven 构建 Spark : error finding javac (but path is correct)

java - 当单元测试覆盖率低于多模块项目中预先配置的限制时,maven 构建失败

linux - 发行版维护者(即 Ubuntu、Fedora)使用什么工具进行构建/依赖管理?

java - 在依赖包重新启动时重新启动依赖的 OSGI 包?

java - 在 NetBeans 8 中创建一个没有所有 Java EE 东西的纯 Servlets 项目?

java - Intellij IDEA - 如何查找项目中的包使用情况

ant - 如何在项目之间最好地共享 Ant 目标?

gradle - gradle依赖管理:编译错误