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
Maven依赖项冲突:快照没有优先级_Maven_Maven 3 - Fatal编程技术网

Maven依赖项冲突:快照没有优先级

Maven依赖项冲突:快照没有优先级,maven,maven-3,Maven,Maven 3,当依赖关系树中存在冲突(相同的工件但不同的版本)时,AFAIK、Maven将通过选择依赖关系的最高版本来解决冲突,并将省略“旧”版本 但是,当较新版本是快照时,它显然会选择较旧的稳定版本而不是快照 在我的例子中:一些工件:0.5.0-SNAPSHOTS(由于与0.4.0冲突而省略)=>0.4.0版是在想要的0.5.0-SNAPSHOT上选择的 我假设这个功能是按设计的,但我不明白为什么。除此之外,是否有办法告诉Maven在稳定版本上拍摄快照?Maven的设计目的是支持发布版本而不是快照版本。我不

当依赖关系树中存在冲突(相同的工件但不同的版本)时,AFAIK、Maven将通过选择依赖关系的最高版本来解决冲突,并将省略“旧”版本

但是,当较新版本是快照时,它显然会选择较旧的稳定版本而不是快照

在我的例子中:一些工件:0.5.0-SNAPSHOTS(由于与0.4.0冲突而省略)=>0.4.0版是在想要的0.5.0-SNAPSHOT上选择的


我假设这个功能是按设计的,但我不明白为什么。除此之外,是否有办法告诉Maven在稳定版本上拍摄快照?

Maven的设计目的是支持发布版本而不是快照版本。我不确定为什么在同一POM中会有两个依赖项,并且不能通过删除一个来解决冲突,因此我将假设其中一个依赖项是从父POM继承的。在这种情况下,您可以将继承的依赖项设置为
true
,我认为它应该允许子POM覆盖它,即使使用较低的版本


如果这样做不起作用,那么解决方案就不好了-编辑您的本地存储库时,它不会意识到0.5.0版本是一个快照(如果您有能力,甚至可以编辑您的私有nexus repo)

Maven的设计目的是支持发布版本而不是快照版本。我不确定为什么在同一POM中会有两个依赖项,并且不能通过删除一个来解决冲突,因此我将假设其中一个依赖项是从父POM继承的。在这种情况下,您可以将继承的依赖项设置为
true
,我认为它应该允许子POM覆盖它,即使使用较低的版本


如果这不起作用,那么解决方案就不好了-编辑本地存储库时,它不会意识到0.5.0版本是一个快照(如果您有能力,甚至可以编辑您的私有nexus repo)

如果0.4.0版本是通过POM中的另一个依赖项作为一个可传递依赖项拉入的,那你应该能做到。
依赖关系:树
目标应该可以帮助您查看是否发生了这种情况。

如果0.4.0版本是通过POM中的另一个依赖关系作为可传递的依赖关系引入的,那么您应该能够访问它。
依赖关系:树
目标应该可以帮助您了解是否发生了这种情况。

您关于Maven总是选择最高版本的假设是不准确的。工件的选择基于很多因素,包括树中依赖关系的深度、树中的顺序、依赖关系是快照还是发布,以及依赖关系管理,这几乎覆盖了所有其他因素

不幸的是,关于Maven的依赖解析算法,我不知道有哪一个确切的信息来源。你会发现它的碎片散落在各处。一些方便的参考资料:

  • 通过一个好的(如果短的话)部分概述主题,以及如何从依赖关系树中选择它们
  • Sonatype Maven的书中有一个更全面的章节介绍了一般情况,这将为你增加很多关于这个主题的知识
  • 同一本书的前一节讨论了这个问题,它与这个问题密切相关,并且在快照版本上有一个很好的章节,尽管没有我希望的那么多,它们如何在依赖项解析中发挥作用
  • 讨论坐标系以及项目继承如何影响包含哪些依赖项
  • 最后,这是一个很好的起点,几乎任何与pom有关的事情。至少对每个pom元素都有一个简短的描述,可以帮助您充分理解,以便能够开始有效地搜索更多信息
至于一些实用的建议,
mvn dependency:tree
的输出对于发现为什么选择依赖项的特定版本非常有用。它甚至经常会告诉你类似“foo:bar:1.2(was1.1)”。一旦确定错误版本的来源,有多种方法可以确保项目使用特定的依赖项版本:

  • 来自导致它们包含在生成中的其他依赖项
  • 向pom添加一个明确的顶级依赖项,而不是依赖于可传递的依赖项
  • (从此链接向下滚动一点)强制依赖项具有指定的特征,而不管它是什么级别的可传递依赖项。小心使用此选项,因为依赖关系管理是病毒性的,依赖于您的项目的其他项目将被依赖关系管理“感染”。还有一个很好的章节介绍

    • 你关于Maven总是选择最高版本的假设是不准确的。工件的选择基于很多因素,包括树中依赖关系的深度、树中的顺序、依赖关系是快照还是发布,以及依赖关系管理,这几乎覆盖了所有其他因素

      不幸的是,关于Maven的依赖解析算法,我不知道有哪一个确切的信息来源。你会发现它的碎片散落在各处。一些方便的参考资料:

      • 通过一个好的(如果短的话)部分概述主题,以及如何从依赖关系树中选择它们
      • Sonatype Maven的书中有一个更全面的章节介绍了一般情况,这将为你增加很多关于这个主题的知识
      • 同一本书的前一节讨论了这个问题,它与这个问题密切相关,并且在快照版本上有一个很好的章节,尽管没有我希望的那么多,它们如何在依赖项解析中发挥作用
      • 讨论坐标系以及项目继承如何影响包含哪些依赖项
      • 最后,对于几乎所有人来说,这是一个很好的起点