具有相同名称、不同路径的Gradle多项目

具有相同名称、不同路径的Gradle多项目,gradle,Gradle,我有一个包含多个子项目的monolith Gradle项目,每个子项目都有自己的子项目,如下所示: project | |-- subprojectA | |-- models | |-- subprojectB | |-- models 这可以很好地编译,但问题是当我试图将对:subprojectB:models的依赖添加到:subprojectA:models时,Gradle认为:subprojectA:models试图添加对自身的依赖,并抱怨循环依赖,

我有一个包含多个子项目的monolith Gradle项目,每个子项目都有自己的子项目,如下所示:

project
  |
  |-- subprojectA
  |    |-- models
  |
  |-- subprojectB
  |    |-- models
这可以很好地编译,但问题是当我试图将对
:subprojectB:models
的依赖添加到
:subprojectA:models
时,Gradle认为
:subprojectA:models
试图添加对自身的依赖,并抱怨循环依赖,即使我这样指定了完全限定的路径(在子项目的
build.gradle
)中:

编译项目(':subprojectB:models')


如何避免这种情况?即使子项目的路径是唯一的,子项目也不能具有相同的名称吗?

依赖项解析的项目标识基于
组:名称:版本或GAV坐标,如中所述

因此,您需要确保不同的
模型
项目具有不同的GAV

  • 实现这一点的一种方法是创建
    子项目a
    (或
    B
  • 另一种方法是不基于包含的文件夹

依赖项解析的项目标识基于
组:名称:版本
或GAV坐标,如中所述

因此,您需要确保不同的
模型
项目具有不同的GAV

  • 实现这一点的一种方法是创建
    子项目a
    (或
    B
  • 另一种方法是不基于包含的文件夹
当前为as Gradle默认情况下使用父目录名称作为项目名称。您可以通过在根项目的
设置中指定唯一的子项目名称来解决此问题。Gradle
如下所示:

include ':subprojectA:models', ':subprojectB:models'
project(':subprojectA:models-a').projectDir = file('subprojectA/models')
project(':subprojectB:models-b').projectDir = file('subprojectA/models')
当前是as Gradle默认使用父目录名称作为项目名称。您可以通过在根项目的
设置中指定唯一的子项目名称来解决此问题。Gradle
类似于:

include ':subprojectA:models', ':subprojectB:models'
project(':subprojectA:models-a').projectDir = file('subprojectA/models')
project(':subprojectB:models-b').projectDir = file('subprojectA/models')

这只适用于Maven,而不适用于Gradle。事实上,Gradle子项目生成的工件默认情况下不会发布到任何地方(就像Maven对本地Maven存储库所做的那样),因此默认情况下,从Gradle子项目创建的工件没有GAV坐标。我的答案可以提供更多的上下文,并显示解决此问题的不同选项。但它过去是正确的,现在也是正确的。即使没有发布,依赖项解决方案也会将项目转换为GAV以解决冲突。这是一个有趣的问题nd令人惊讶的声明,特别是作为Gradle项目的默认版本(如果未设置),字面上是“未指定的”。您是否有任何指向文档或Gradle源代码的链接,表明Gradle确实创建(有些人为的)GAV坐标来解决同一根项目中的子项目之间的冲突(不在子项目和第三方工件之间)?这只适用于Maven,不适用于Gradle。事实上,Gradle子项目生成的工件默认不会发布到任何地方(就像Maven对本地Maven存储库所做的那样),因此默认情况下,从Gradle子项目创建的工件没有GAV坐标。我的答案可以提供更多的上下文,并显示解决此问题的不同选项。但它过去是正确的,现在也是正确的。即使没有发布,依赖项解决方案也会将项目转换为GAV以解决冲突。这是一个有趣的问题nd令人惊讶的声明,特别是作为Gradle项目的默认版本(如果未设置),字面上是“未指定的”。您是否有任何指向文档或Gradle源代码的链接,表明Gradle确实创建(有些人为的)GAV坐标来解决同一根项目中的子项目之间的冲突(不在子项目和第三方工件之间)?相关(尽管关注Eclipse):相关(尽管关注Eclipse):