Gradle / Maven对循环依赖的行为

时间:2016-03-04 08:30:28

标签: maven gradle circular-dependency

我目前正在使用我们的"非Maven"填充Maven存储库。 jars,以便Maven / Gradle中的未来项目可以使用它们。不幸的是,我们在"非Maven"中有一些循环依赖。项目。我现在的问题是,如果他们遇到

,Maven或Gradle会发生什么
  • 真正的循环依赖,如foo-1.0.0.jar - > bar-1.0.0-jar - > FOO-1.0.0.jar

  • "旧版圈"因为foo-3.0.0.jar使用bar-2.0.0.jar而bar-2.0.0.jar使用foo-1.0.0.jar。

这不是关于构建foo.jar或bar.jar,而是关于构建依赖于foo.jar或bar.jar的项目。

1 个答案:

答案 0 :(得分:2)

真正的循环依赖将导致错误:Maven将直接使构建失败。当您依赖于与当前项目具有相同Maven coordinates的工件时,会发生循环依赖:groupIdartifactIdversionpackaging和{ {1}}。通常,我们处理的classifier没有分类,因此具有相同的jargroupIdartifactId通常会定义循环依赖。

旧版本的圆圈不是圆圈本身,因为Maven坐标不一样。在这种情况下,Maven将通过应用dependency mediation来保留较新版本:

  

这意味着它将在依赖树

中使用与项目最接近的依赖项版本

正如khmarbaise指出的那样,如果您想要在旧版本圈子的情况下使构建失败,您可以配置versionbanCircularDependencies禁止它额外的规则。