Java 具有重复子项目名称的渐变混淆依赖项

Java 具有重复子项目名称的渐变混淆依赖项,java,gradle,Java,Gradle,我有一个有很多子项目和子项目的毕业项目。我们发现了一种奇怪的情况,是这样的: 以下是一个简化的项目结构: 格雷德尔先生 格雷德尔酒店 sub-1 普通的 格雷德尔先生 src 亚甲 普通的 格雷德尔先生 src 战争 格雷德尔先生 src sub2 我的问题是——sub:sub-1:sub-a:war依赖于:sub-1:common和:sub-1:sub-a:common和:sub-1:sub-a:war无法构建,因为有些gradle看到了这两个依赖项,但只保留了一个:s

我有一个有很多子项目和子项目的毕业项目。我们发现了一种奇怪的情况,是这样的:

以下是一个简化的项目结构:

  • 格雷德尔先生
  • 格雷德尔酒店
  • sub-1
    • 普通的
      • 格雷德尔先生
      • src
    • 亚甲
      • 普通的
        • 格雷德尔先生
        • src
      • 战争
        • 格雷德尔先生
        • src
  • sub2
我的问题是——sub:sub-1:sub-a:war依赖于:sub-1:common和:sub-1:sub-a:common和:sub-1:sub-a:war无法构建,因为有些gradle看到了这两个依赖项,但只保留了一个:sub-1:sub-a:common。运行gradle dependencies将显示一行,看起来像:sub-1:common->sub-1:sub-a:common

gradle似乎在计算依赖项时丢弃了一些东西,或者太聪明了,看到两个子项目具有相同的“最终”名称,并且在计算或提取的依赖项列表中只选择其中一个

当然,如果我将:sub-1:sub-a:common重命名为:sub-1:sub-a:common1,问题就会消失。FWIW:这两个通用子项目都使用JAR——但它们设置了非常不同的特定archivesBaseName

除了确保“leaf”子项目的所有名称都是全局唯一的之外,还有什么方法可以解决这个问题吗


(注意:可能会出现退化的代码/项目结构模式——但是这出现在ant->gradle转换项目中,在此“阶段”中,我们不会更改结构,只更改构建工具。虽然我欢迎对更改结构的评论,但我确实想看看是否可以使用我首先拥有的内容做些什么)

一个快速解决方法是使项目组名唯一

当然,如果您需要发布来自相同项目的工件,这可能是不可能的。但通常情况并非如此,更改
名称可以解决冲突

project(':sub1:common').group = 'sub1.common'
project(':sub1:suba:common').group = 'sub1.suba.common'

问题尚未解决,但原因和补救措施更为明确。对于好奇的人来说,gradle/论坛的帖子是关于同一件事的——但更清晰的问题描述。这是一个github项目,说明了这种情况。