我遇到了与报告here相同的问题:
我有一个Java项目A,它取决于项目B(模块),以及 项目B依赖于项目C(另一个模块)。对于项目A我 想设置“includeBuild ../projectB”和项目B I. 我想设置“includeBuild ../projectC”以便我可以 在Eclipse + Buildship 2.0中开发所有东西而无需运行 对每个项目A,B和C中的每个小变化进行Gradle。
但如果我设置了这个,我得到:“包含的构建'%s'不能包括在内 建立“。
预期行为
递归“includeBuild”会递归地包含依赖项目。
当前行为
我得到“包含的构建'%s'不能包含构建。”。
您的环境
Gradle 3.5,Buildship 2.0,Eclipse 3.6
如何解决/解决此问题?在我的实例中,我有包含电子邮件功能的实用程序项目(使用JavaMail)。数据项目和UI项目中需要电子邮件功能。 UI项目还取决于数据项目。
答案 0 :(得分:14)
为另一种方法添加另一个答案......
每个includeBuild
都可以在includeBuild
之前添加一个检查,以查看它是否已在复合内部。如果它已经在复合材料中,它就不会project2/settings.gradle
。
有关复合检查的详细信息,请参阅here
例如
boolean inComposite = gradle.parent != null
if (!inComposite) {
includeBuild '../project1'
}
project3/settings.gradle
boolean inComposite = gradle.parent != null
if (!inComposite) {
includeBuild '../project1'
includeBuild '../project2'
}
project4/settings.gradle
boolean inComposite = gradle.parent != null
if (!inComposite) {
includeBuild '../project1'
includeBuild '../project2'
includeBuild '../project3'
}
gradle
等等
使用这种方法,您可以从任何地方运行{{1}},它应该按预期运行(即用本地项目代替依赖项)
答案 1 :(得分:3)
您是否考虑过
请注意,settings.gradle
本身就是一个groovy脚本,因此您可以创建一个动态合成,例如所有子文件夹在父项下都有build.gradle。
超级/ settings.gradle
new File("c:/someFolder").listFiles().each { File f ->
if (f.directory && new File(f, 'build.gradle').exists()) {
includeBuild f
}
}
例如
c:/someFolder/project1/build.gradle
c:/someFolder/project1/src/main/java/**/*.java
c:/someFolder/project2/build.gradle
c:/someFolder/project2/src/main/java/**/*.java
c:/uber/settings.gradle (as above)