【发布时间】:2017-10-19 21:17:01
【问题描述】:
我想遍历我的 test/ 目录,其中包含每个测试用例的子文件夹,然后想在每个子文件夹中执行不同的任务。
这不起作用:
plugins {
id 'com.github.eerohele.saxon-gradle' version '0.3.0'
}
task lessCompile {
description 'compile less to css'
...
}
task runAllTests(dependsOn: lessCompile) {
description 'runs all tests'
doLast {
new File(testFolder).eachDir() { testcase->
println testcase
// transform test_dev.xml to test_dev_prep.xml
xslt {
input file(testcase + '/test_dev.xml')
stylesheet file('xslt/prepare.xsl')
output file(testcase + '/test_dev_prep.xml')
}
exec {
workingDir '.'
commandLine 'cmd', "/c sys-command $testcase -param ..."
}
javaexec {
classpath = buildscript.configurations.classpath
main = '.....'
args = ['-headless', '-f1', "$testcase/file1" ]
}
}
}
}
runAllTests 任务失败,因为 xslt 任务无法在 doLast 闭包 (issue) 内执行,因为从未正式支持从 doFirst/doLast 调用任务 (SO answer)。
但是,迭代目录、执行测试并将参数传递给这些任务的官方方法是什么。
不要附带dependsOn,这不适用于我的情况。在此示例中,我仅在此处使用它来说明 lessCompile 是一个静态任务,这与我尝试从 doLast 块中调用的其他任务相反。
【问题讨论】:
-
Gradle 任务在构建中只能执行一次。因此,您可以对所有目录使用一项任务(和一次执行),也可以对每个目录使用一项任务。
标签: gradle build.gradle