Jam*_*mes 16 eclipse gradle buildship
我遇到了与此处报道的相同问题:
我有一个Java项目A,它依赖于项目B(模块),而项目B依赖于项目C(另一个模块).对于项目AI,我想设置"includeBuild ../projectB",而项目BI也想设置"includeBuild ../projectC",以便我可以在Eclipse + Buildship 2.0中开发所有内容,而无需为每一个小变化运行Gradle在每个项目A,B和C.
但如果我设置了这个,我得到:"包含的构建'%s'不能包含构建."
预期的行为
递归"includeBuild"将递归地包含依赖项目.
当前行为
我得到"包含的构建'%s'不能包含构建."
你的环境
Gradle 3.5,Buildship 2.0,Eclipse 3.6
我该如何解决/解决这个问题?在我的实例中,我有包含电子邮件功能的实用程序项目(使用JavaMail).数据项目和UI项目中需要电子邮件功能.UI项目还取决于数据项目.
lan*_*ava 16
为另一种方法添加另一个答案......
每个人都settings.gradle可以在之前添加一个检查,includeBuild看看它是否已经在复合材料中.如果它已经在复合材料中,则不会includeBuild.
有关复合检查的更多信息,请参见此处
例如
project2/settings.gradle
boolean inComposite = gradle.parent != null
if (!inComposite) {
includeBuild '../project1'
}
Run Code Online (Sandbox Code Playgroud)
project3/settings.gradle
boolean inComposite = gradle.parent != null
if (!inComposite) {
includeBuild '../project1'
includeBuild '../project2'
}
Run Code Online (Sandbox Code Playgroud)
project4/settings.gradle
boolean inComposite = gradle.parent != null
if (!inComposite) {
includeBuild '../project1'
includeBuild '../project2'
includeBuild '../project3'
}
Run Code Online (Sandbox Code Playgroud)
等等
使用这种方法,您可以gradle从任何您喜欢的地方运行,它应该按预期运行(即替换本地项目的依赖项)
你有没有考虑过
请注意,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
}
}
Run Code Online (Sandbox Code Playgroud)
例如
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |