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