自动获取maven中最新的可传递依赖项
考虑一种非常常见的情况,当一个项目依赖于两个库时,每个库都会过渡地带来不同版本的第三个库:自动获取maven中最新的可传递依赖项,maven,transitive-dependency,Maven,Transitive Dependency,考虑一种非常常见的情况,当一个项目依赖于两个库时,每个库都会过渡地带来不同版本的第三个库: Project A: Library B: Library D: version 1 Library C: Library D: version 2 我可以使用来检测此类问题,然后在项目A的pom中直接指定库D的版本,例如,在第节中 但这会产生另一个问题:现在我必须手动跟踪库D的版本,即使我的项目没有直接使用它 每当我更改库B或库C的版本时,我必须记住在我
Project A:
Library B:
Library D: version 1
Library C:
Library D: version 2
我可以使用来检测此类问题,然后在项目A的pom中直接指定库D的版本,例如,在第节中
但这会产生另一个问题:现在我必须手动跟踪库D的版本,即使我的项目没有直接使用它每当我更改库B或库C的版本时,我必须记住在我的项目中也要更新库D的版本。这很容易忘记强> 有没有办法告诉maven只使用最新版本的可传递库
比如:
<dependencyManagement>
...
<dependency>
<groupId>path.to</groupId>
<artifactId>library-D</artifactId>
<version>
<use_newest_one_from_all_transitive_dependencies_please/>
</version>
</dependency>
...
路径
图书馆-D
有没有办法做到这一点?没有,正如赫马尔拜斯所说,这是不可能的 解决方案规则深深扎根于Maven本身。您可以检查解析的结果(正如您已经提到的),但不能更改它
我们决定通过使用我们在
部分导入的适当的BOM(依赖项管理列表),修复几乎所有版本的可传递依赖项。这保证了所有依赖项都是最新版本的。这并不能保证所有的东西都能放在一起。但是使用最新版本作为标准也不能做到这一点。您可以添加依赖项,然后按照建议自动管理它。这使用了。当然,它将采用最新版本,而不是最新的可传递依赖项版本。版本范围也是一种可能性,但不鼓励使用它们。对此的简单回答是:不……算法就是这样使用最接近您的项目的版本……通常库B+C的维护者应该使用相同的版本(不会一直工作)或者您必须通过dependencyManagement否决应该使用的D版本。最后一个问题是:B与版本2一起工作还是C与版本1一起工作?两者都可能失败…只能通过测试进行检查…或者如果更糟,您的构建将无法编译/测试将失败…如果B
和C
可以使用较旧版本的D
运行(至少是对您有用的方法),您可以从B
和C
中排除可传递依赖项D
,然后在a
中添加较旧的(但不变的)D
作为直接依赖项。使用exclusion
标记将传递词排除在编译时之外。@nipuntathsara如果要选择版本,只需使用
。无需排除。