我目前正在使用我们的"非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的项目。
答案 0 :(得分:2)
真正的循环依赖将导致错误:Maven将直接使构建失败。当您依赖于与当前项目具有相同Maven coordinates的工件时,会发生循环依赖:groupId
,artifactId
,version
,packaging
和{ {1}}。通常,我们处理的classifier
没有分类,因此具有相同的jar
,groupId
和artifactId
通常会定义循环依赖。
旧版本的圆圈不是圆圈本身,因为Maven坐标不一样。在这种情况下,Maven将通过应用dependency mediation来保留较新版本:
这意味着它将在依赖树
中使用与项目最接近的依赖项版本
正如khmarbaise指出的那样,如果您想要在旧版本圈子的情况下使构建失败,您可以配置version
以banCircularDependencies
禁止它额外的规则。