Gradle 在子项目上执行梯度任务
我正在尝试配置一个多模块gradle项目Gradle 在子项目上执行梯度任务,gradle,build.gradle,multi-module,Gradle,Build.gradle,Multi Module,我正在尝试配置一个多模块gradle项目 Root projA projB other projC projD projE ... 我希望能够在root build.gradle中有一个任务,它将在另一个目录中的每个项目中执行buildJar任务 我知道我能行 configure(subprojects.findAll {it.name != 'tropicalFish'}) { task hell
Root
projA
projB
other
projC
projD
projE
...
我希望能够在root build.gradle中有一个任务,它将在另一个目录中的每个项目中执行buildJar任务
我知道我能行
configure(subprojects.findAll {it.name != 'tropicalFish'}) {
task hello << { task -> println "$task.project.name"}
}
configure(subprojects.findAll{it.name!='tropicalFish'}){
任务hello println“$task.project.name”}
}
但这也会得到projA和projB,我只想在c,d,e上运行任务。。。
请让我知道实现这一目标的最佳方法。不完全确定您所追求的是哪一个,但它们应该涵盖您的基础 1。直接调用任务 你应该可以打个电话
gradle :other/projC:hello :other/projD:hello
我用以下方法对此进行了测试:
# Root/build.gradle
allprojects {
task hello << { task -> println "$task.project.name" }
}
2。仅在子项目中创建任务
还是您只希望在其他/*项目上创建任务
如果是后者,则以下操作有效:
# Root/build.gradle
allprojects {
if (project.name.startsWith("other/")) {
task hello << { task -> println "$task.project.name" }
}
}
3。创建仅在子项目中运行任务的任务
这个版本与我对您的问题的理解相匹配,这意味着子项目(buildJar)上已经有一个任务,并且在root中创建了一个任务,该任务将只调用子项目other/*:buildJar
allprojects {
task buildJar << { task -> println "$task.project.name" }
if (project.name.startsWith("other/")) {
task runBuildJar(dependsOn: buildJar) {}
}
}
你的问题可以从很多方面来理解,希望这能涵盖所有方面:)我今天发现了这个问题,因为我有同样的问题。马克提到的所有方法都可以使用,但都有一些缺点。因此,我又增加了一个选项: 4。切换当前项目
gradle -p other hello
这将切换“当前项目”,然后运行当前项目下名为
hello
的所有任务。示例5。定义所有项目和子项目的通用行为
allprojects {
task hello {
doLast { task ->
println "I'm $task.project.name"
}
}
}
subprojects {
hello {
doLast {
println "- I depend on water"
}
}
}
从Gradle文档中,
谢谢你的回答。没有一个选项适合我的需要:1。我们需要知道所有子项目的列表。2+3. 需要修改生成脚本。最后,我找到了实现这一点的另一种方法,并将其作为一个新的答案添加进去。@Marwin:你的答案在哪里?会感兴趣的。@frhd看到我下面的答案
gradle-p other hello
需要注意的是,这会将工作目录切换到“other”。因此,如果没有'other/build.gradle'文件(我们使用父目录中的“subprojects{…}”来配置子项目),则此操作将失败。这就是为什么我推荐另一个答案,并使用“gradle:taskName”代替。
$ gradle runBuildJar
:other/projC:buildJar
other/projC
:other/projC:runBuildJar
:other/projD:buildJar
other/projD
:other/projD:runBuildJar
gradle -p other hello
allprojects {
task hello {
doLast { task ->
println "I'm $task.project.name"
}
}
}
subprojects {
hello {
doLast {
println "- I depend on water"
}
}
}