什么样的实现可以得到所有子项目在每个IncludedBuilds在Gradle自定义任务?



这就是问题所在:它无法在每个includedBuilds或rootProjects中找到包含项目或我们所谓的子项目。

//build.gradle <root>
def excludedBuilds = ["docker", "internals"]
["clean", "build", "Check"].each { taskName ->
tasks.create(taskName.concat("All")) {
group = '<3 in 1>'
gradle.includedBuilds.each { build ->
if (excludedBuilds.contains(build.name)) return
dependsOn gradle.includedBuild(build.name).task(":${???}:$taskName")
//                                                               ^ HERE, how can we get all of the subProjects in each includedBuilds?
}
}
}
// figure 1.0

这个脚本的KOTLIN版本是什么(图1.0)?

我们能把这个(图2.0)变成(图1.0)吗?

// figure 2.0
tasks.register("checkAll") {
group = "<HERE>"
dependsOn(gradle.includedBuild("application").task(":app:check"))
dependsOn(gradle.includedBuild("application").task(":main-frame:check"))
dependsOn(gradle.includedBuild("utilities").task(":our-strings:check"))
dependsOn(gradle.includedBuild("utilities").task(":our-maths:check"))
}
tasks.register("buildAll") {
group = "<HERE>"
dependsOn(gradle.includedBuild("application").task(":app:build"))
dependsOn(gradle.includedBuild("application").task(":main-frame:build"))
dependsOn(gradle.includedBuild("utilities").task(":our-strings:build"))
dependsOn(gradle.includedBuild("utilities").task(":our-maths:build"))
}
tasks.register("cleanAll") {
group = "<HERE>"
dependsOn(gradle.includedBuild("application").task(":app:clean"))
dependsOn(gradle.includedBuild("application").task(":main-frame:clean"))
dependsOn(gradle.includedBuild("utilities").task(":our-strings:clean"))
dependsOn(gradle.includedBuild("utilities").task(":our-maths:clean"))
}

也许这个可以满足我的大脑?我知道这有点不对劲。但是,是的,它是有效的(辛苦的!)

def excludedBuilds = ["<excluded build>", "<and so on>"]
def utilities = ["<subProj#1>", "<subProj#2>", "<and so on>"]
def application = ["<subProj#1>", "<subProj#2>", "<and so on>"]
def arrayz;
["clean", "build", "check"].each { taskName ->
tasks.create(taskName.concat("All")) {
group = '<3 in 1>'
gradle.includedBuilds.each { build ->
if (excludedBuilds.contains(build.name)) return
switch(build.name) {
case "application":
arrayz = application
break;
case "utilities":
arrayz = utilities
break;
default:
return
}
for(String subProj : arrayz)
dependsOn gradle.includedBuild(build.name).task(":$subProj:$taskName")
}
}
}

我们也可以试试这个。

arrayz.each { subProj ->
dependsOn gradle.includedBuild(build.name).task(":$subProj:$taskName")
}

最新更新