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