Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在maven中使用dependencyManagement通常不会导致问题?_Java_Maven_Dependency Management_Transitive Dependency - Fatal编程技术网

Java 为什么在maven中使用dependencyManagement通常不会导致问题?

Java 为什么在maven中使用dependencyManagement通常不会导致问题?,java,maven,dependency-management,transitive-dependency,Java,Maven,Dependency Management,Transitive Dependency,我知道Maven中的DependencyManager在避免子POM中的依赖项的不同版本以及使用依赖项的一个(且仅一个)版本方面为您带来了巨大的好处 同时,我正在努力理解为什么通过dependencyManagement覆盖可传递依赖项是一件安全的事情。 假设我们有一个依赖项D,它被设置为2.0版,带有DependencyManager。 另一个依赖项-C-也使用D,尽管它在版本1.0中依赖于D。 使用DependencyManager,我将此可传递依赖项设置为2.0。 这不是很危险吗?毕竟,C

我知道Maven中的DependencyManager在避免子POM中的依赖项的不同版本以及使用依赖项的一个(且仅一个)版本方面为您带来了巨大的好处

同时,我正在努力理解为什么通过dependencyManagement覆盖可传递依赖项是一件安全的事情。 假设我们有一个依赖项D,它被设置为2.0版,带有DependencyManager。 另一个依赖项-C-也使用D,尽管它在版本1.0中依赖于D。 使用DependencyManager,我将此可传递依赖项设置为2.0。
这不是很危险吗?毕竟,C依赖于API和1.0版的实现——如果在D的1.0版和2.0版之间进行了突破性的更改怎么办?

这样做是不安全的

它会导致你所描述的问题


但由于一个依赖项不能有多个版本(至少不能没有着色),所以需要选择一个版本,或者由Maven决定。在大多数情况下,后者比自己选择一个合理的版本更危险。

这样做并不安全

它会导致你所描述的问题

但由于一个依赖项不能有多个版本(至少不能没有着色),所以需要选择一个版本,或者由Maven决定。在大多数情况下,后者比自己选择一个合理的版本更危险。

它之所以有效,是因为D2.0是向后兼容的。 因此,D2.0提供了与D1.0相同的所有API和功能,因此C可以使用它

如果D2.0不向后兼容,则存在冲突。您可能需要升级C,或者找到所有依赖项都可以愉快地依赖的较低版本的D

您可以使用
mvn dependency:tree
解决前面提到的冲突

因为D2.0是向后兼容的。 因此,D2.0提供了与D1.0相同的所有API和功能,因此C可以使用它

如果D2.0不向后兼容,则存在冲突。您可能需要升级C,或者找到所有依赖项都可以愉快地依赖的较低版本的D


您可以使用
mvn dependency:tree
来解决前面提到的冲突

您所描述的是一个非常可能的问题,我个人很高兴修复一些项目上的maven依赖项,因为它们存在冲突,导致抛出“NoSuchMethodException”。但这不是每天都会发生的事情。你所描述的是一个很可能出现的问题,我个人很高兴修复我们一些项目的maven依赖关系,因为它们之间存在冲突,导致抛出“NoSuchMethodException”。但这并不是每天都会发生