Gradle多项目不';不要将项目添加到类路径

Gradle多项目不';不要将项目添加到类路径,gradle,build.gradle,Gradle,Build.gradle,我有一些依赖他人的项目。我还有一个项目,它依赖于两个项目,每个项目都依赖于同一个项目。大概是这样的: -Project A * Project 1 ** Project C * Project 2 ** Project C -ProjectA -ProjectC -Project1 -Project2 rootFolder | |- build.gradle |- settings.gradle | |- ProjectA | |-build.gradle | |- Pro

我有一些依赖他人的项目。我还有一个项目,它依赖于两个项目,每个项目都依赖于同一个项目。大概是这样的:

-Project A
 * Project 1
  ** Project C
 * Project 2
  ** Project C
-ProjectA
-ProjectC
-Project1
-Project2
rootFolder
|
|- build.gradle 
|- settings.gradle 
|
|- ProjectA
|  |-build.gradle
|
|- Project1
|  |-build.gradle
|
|- Project2
|  |-build.gradle
|
|- ProjectC
   |-build.gradle
ProjectA
|-Project1
|  |-ProjectC
|
|-Project2
   |-ProjectC  
工作区的结构如下所示:

-Project A
 * Project 1
  ** Project C
 * Project 2
  ** Project C
-ProjectA
-ProjectC
-Project1
-Project2
rootFolder
|
|- build.gradle 
|- settings.gradle 
|
|- ProjectA
|  |-build.gradle
|
|- Project1
|  |-build.gradle
|
|- Project2
|  |-build.gradle
|
|- ProjectC
   |-build.gradle
ProjectA
|-Project1
|  |-ProjectC
|
|-Project2
   |-ProjectC  
所有项目都处于同一水平

因此,在我的项目A中的settings.gradle中,我有:

include ':Project1',':Project1:ProjectC',[...]
project(':Project1') = new File('../Project1')
project(':Project2') = new File('../Project2')
project(':Project1:ProjectC') = new File('../ProjectC')
project(':Project2:ProjectC') = new File('../ProjectC')
在build.gradle中,我会:

dependencies{ compile project('Project1'),project('Project2')
问题是它没有正确地添加到类路径中。我认为,由于Project1和Project2都依赖于ProjectC,所以它会被某种方式覆盖。有什么想法吗

谢谢

编辑

以下是依赖关系树:

Root project 'ProjectA'
+--- Project ':ProjectB'
|    \--- Project ':ProjectB:Project1'
|         +--- Project ':ProjectB:Project1:Project2'
|         \--- Project ':ProjectB:Project1:Project3'
\--- Project ':ProjectC'
     \--- Project ':ProjectC:Project1'
          +--- Project ':ProjectC:Project1:Project2'
          \--- Project ':ProjectC:Project1:Project3'

对于如下所示的工作区:

-Project A
 * Project 1
  ** Project C
 * Project 2
  ** Project C
-ProjectA
-ProjectC
-Project1
-Project2
rootFolder
|
|- build.gradle 
|- settings.gradle 
|
|- ProjectA
|  |-build.gradle
|
|- Project1
|  |-build.gradle
|
|- Project2
|  |-build.gradle
|
|- ProjectC
   |-build.gradle
ProjectA
|-Project1
|  |-ProjectC
|
|-Project2
   |-ProjectC  
您的settings.gradle应如下所示(与子项目的依赖关系无关):

您只是告诉根项目有4个子项目以及它们的位置。就这样

现在,依赖关系在每个子项目的build.gradle文件中处理。对于如下所示的依赖关系:

-Project A
 * Project 1
  ** Project C
 * Project 2
  ** Project C
-ProjectA
-ProjectC
-Project1
-Project2
rootFolder
|
|- build.gradle 
|- settings.gradle 
|
|- ProjectA
|  |-build.gradle
|
|- Project1
|  |-build.gradle
|
|- Project2
|  |-build.gradle
|
|- ProjectC
   |-build.gradle
ProjectA
|-Project1
|  |-ProjectC
|
|-Project2
   |-ProjectC  
ProjectA的build.gradle:

dependencies{
    compile project(':Project1')
    compile project(':Project2')
}
dependencies{
    compile project(':ProjectC')
}
dependencies{
    compile project(':ProjectC')
}
Project1的build.gradle:

dependencies{
    compile project(':Project1')
    compile project(':Project2')
}
dependencies{
    compile project(':ProjectC')
}
dependencies{
    compile project(':ProjectC')
}
Project2的build.gradle:

dependencies{
    compile project(':Project1')
    compile project(':Project2')
}
dependencies{
    compile project(':ProjectC')
}
dependencies{
    compile project(':ProjectC')
}

我最后做的是在类路径中更改出错的路径,如下所示:

-Project A
 * Project 1
  ** Project C
 * Project 2
  ** Project C
-ProjectA
-ProjectC
-Project1
-Project2
rootFolder
|
|- build.gradle 
|- settings.gradle 
|
|- ProjectA
|  |-build.gradle
|
|- Project1
|  |-build.gradle
|
|- Project2
|  |-build.gradle
|
|- ProjectC
   |-build.gradle
ProjectA
|-Project1
|  |-ProjectC
|
|-Project2
   |-ProjectC  
格雷德尔先生

 eclipse{
    classpath{
        file{
             whenMerged { classpath ->

                classpath.entries.find { entry -> 
                    entry.kind == 'src' && entry.path.contains('ProjectC')
                }.each{ entry ->
                    entry.path=file("/ProjectC")
                }



            }
        }
    }
 }

而且效果很好。我仍然不知道为什么gradle不能正确创建类路径…

如果projectC存在于一个位置,您不应该将它添加到settings.gradle中两次。相反,Project1和Project2应该在各自的依赖项部分中提到projectC。Project1和Project2在各自的依赖项中确实提到projectC。但如果我在A项目中提到Project1或Project2,gradle会告诉我他找不到Project1:ProjectC。我不得不添加它,如果我添加一个项目,显然我必须添加一个对他所依赖的项目的引用。我添加了更多的信息。问题是所有的项目都在同一个级别。所以ProjectA settings.gradle必须引用:Project1:ProjectC,对吗?我强烈建议您使用根级别的settings.gradle,如我所示。它只是让事情变得更简单。不过,按照您的方式来做,对projectC的引用看起来与您对project1的引用完全相同<代码>包括“../ProjectC”并且只包含一次。但是ProjectA不依赖于ProjectC。它取决于项目1和项目2,这两个项目都依赖于项目C。所以在ProjectA中我必须提到Project1和Project2以及这两个项目所依赖的项目,对吗?我很抱歉这么困惑,谢谢你的帮助!settings.gradle不定义依赖关系。它只是一个子项目的列表以及它们所在的位置。依赖项信息包含在每个项目的build.gradle中。