我正在创建一个测试助手库,它使用来自其他几个项目的补丁。其中一些项目可能实际上使用这个测试助手作为他们自己的测试的一部分。这似乎是循环的,但事实证明不是多模块设置造成的;只有主服务模块的测试才会使用测试助手库,而客户端、模拟器和夹具模块则不受这种依赖:
- 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中,我总是希望排除foo-{client、仿真器、夹具}的测试助手库的版本,因为我希望foo服务测试使用最新的客户端、模拟器和夹具,而不是与test-lib-helper一起打包的旧版本。我可以做一些事情来将测试助手库标记为具有低优先级的传递依赖关系吗?
发布于 2019-11-15 20:31:31
首先,我想你并没有在你的设置中描述的问题。Maven有一个“最近的依赖赢”规则。由于您的test-helper-lib依赖项似乎比其他依赖项嵌套得更多,因此它们将松散。
不过,一般情况下,我不太喜欢Maven依赖中介。一旦依赖树变得拥挤,就很难找到真正“获胜”的版本。我建议大量使用<dependencyManagement>,它允许您控制传递依赖关系的版本(而不实际向依赖树添加可能不需要的内容)。
对于您的具体问题:不,您不能或多或少地优先考虑版本号。
https://stackoverflow.com/questions/58878833
复制相似问题