Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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中是一个严重的问题吗?_Java_Maven_Clojure_Dependencies_Dependency Management - Fatal编程技术网

Java 冲突的可传递依赖关系在Maven中是一个严重的问题吗?

Java 冲突的可传递依赖关系在Maven中是一个严重的问题吗?,java,maven,clojure,dependencies,dependency-management,Java,Maven,Clojure,Dependencies,Dependency Management,我有一个项目X,它在依赖层次结构中显示了很多相互冲突的依赖关系(如Eclipse的依赖层次结构视图所示)。我看到很多事情,比如: clojure: 1.3.0 (omitted for conflict with 1.4.0) [compile] 这通常是因为X使用的两个库指定了另一个库的两个不同版本,即冲突是由于共享的可传递依赖关系而发生的。在相当多的情况下,冲突发生在我无法直接控制的第三方库中 幸运的是,现在一切正常,但我担心这种情况是否会在将来导致问题 这是我应该担心的问题吗?如果是,我

我有一个项目X,它在依赖层次结构中显示了很多相互冲突的依赖关系(如Eclipse的依赖层次结构视图所示)。我看到很多事情,比如:

clojure: 1.3.0 (omitted for conflict with 1.4.0) [compile]
这通常是因为X使用的两个库指定了另一个库的两个不同版本,即冲突是由于共享的可传递依赖关系而发生的。在相当多的情况下,冲突发生在我无法直接控制的第三方库中

幸运的是,现在一切正常,但我担心这种情况是否会在将来导致问题


这是我应该担心的问题吗?如果是,我应该怎么做?

是的,这样的冲突可能会很严重

在相互比较版本时,您不知道依赖项中是否存在不兼容的更改(在比较次要版本时,不应该存在不兼容的更改,但谁知道呢?)。或者某个依赖项依赖于另一个依赖项的错误行为。如果这个bug已经修复了怎么办?取决于错误的一个模块将无法正确执行


您应该排除冲突的依赖项(更有可能排除较低版本)。对于您输入的每个排除,您必须检查排除的版本与当前使用的版本之间是否存在不兼容的更改。如果是这种情况,您必须检查依赖于该模块的依赖项,如果它们受到此类更改的影响

如果maven选择了较新的版本,大多数情况下这应该是可以的

您应该开始担心主版本(第一个数字)中的差异是否会导致冲突,或者是否省略了较新的版本。Unitstests有助于捕捉这些问题,但eclipse项目和maven依赖项通常在微妙的方面有所不同(调试范围等)。唯一真正的保护似乎是集成测试。

这可能是一个严重的问题,因为您永远无法确定到底发生了什么,这很糟糕。我认为使用maven配置的重要意义在于明确说明发生了什么以及使用了哪些依赖项


至于你应该怎么做,请看我的-你应该通过显式地配置使用哪个版本和省略哪个版本来解决它们,并且可以使它更容易使用。这是为了保护您不受冲突的可传递依赖项的影响。

是的,这是一个问题。通常不同的版本包含相同的类。最后,java只加载该类的一个版本。它可能是旧版本,也可能是新版本。它可能会导致运行时错误,如神秘的NoSuchMethodError、ClassNotFoundExceptions等。

自从我的“xml和xml解析器冒险”以来,我尝试缓解这些问题,即至少尝试一下。一个库依赖于另一个库的一个且仅依赖于另一个库的一个版本,而由于另一个库需要同一个库的更新版本,因此该库被省略,这感觉就像是一个执行良好的球中踢。我通常尝试管理冲突的第三方库的版本。尽管我不得不承认它并不总是有效。或者工作得很好。