2016-03-04 59 views
2

我目前正在用我们的“非Maven”jar包填充Maven存储库,以便Maven/Gradle中的未来项目可以使用它们。不幸的是,我们在“非Maven”项目中有一些循环依赖。我的问题是现在,在Maven中或摇篮会发生什么,如果他们遇到循环依赖的Gradle/Maven的行为

  • 一个真正的循环依赖,类似foo-1.0.0.jar - >酒吧-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

对于签入Maven,您可以使用http://www.mojohaus.org/extra-enforcer-rules/banCircularDependencies.html – khmarbaise

回答

2

真正的循环依赖会导致错误:Maven将直接失败构建。当您透明地依赖与当前项目groupId,artifactId,version,packagingclassifier具有相同Maven coordinates的工件时,会发生循环依赖。一般来说,我们正在处理没有分类器的jar,因此具有相同的groupId,artifactIdversion通常定义了循环依赖关系。

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

which means that it will use the version of the closest dependency to your project in the tree of dependencies


由于khmarbaise指出,如果你正在寻找即使在旧版本圆的情况下,以构建失败,你可以将maven-enforcer-plugin配置为使用banCircularDependencies附加规则来禁止它。

+0

那么,如果它回到当前项目,它只是一个圆圈?依赖关系中的圆圈怎么样?我的项目取决于foo.jar,这取决于bar.jar,这取决于foo.jar。 –

+0

@JFMeier在依赖项中不能有一个圆:它不能在第一个位置被创建:) – Tunaki

+0

如果不是使用Maven/Gradle构建的,这不是真的。我正在将旧罐转移到存储库并为它们生成POM。 –