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中。