多次运行gradle任务
我有一个gradle项目,在子目录中包含两个模块。目录结构如下所示多次运行gradle任务,gradle,build.gradle,Gradle,Build.gradle,我有一个gradle项目,在子目录中包含两个模块。目录结构如下所示 root module1 build.gradle module2 build.gradle build.gradle settings.gradle 顶级设置。gradle包括两个模块。顶级build.gradle包含以下内容 task runScript(type: Exec) { workingDir 'scripts' commandLin
root
module1
build.gradle
module2
build.gradle
build.gradle
settings.gradle
顶级设置。gradle
包括两个模块。顶级build.gradle
包含以下内容
task runScript(type: Exec) {
workingDir 'scripts'
commandLine 'python3', 'myscript.py'
}
project(':module1') {
evaluationDependsOn(':module1')
final test = tasks.findByName('test')
test.dependsOn(runScript)
}
project(':module2') {
evaluationDependsOn(':module2')
final test = tasks.findByName('test')
test.dependsOn(runScript)
}
任务runScript
将数据库设置为已知状态,并且在每个模块测试任务之前必须运行
当我运行测试任务时,我的脚本只执行一次。如何确保它执行多次
$ ./gradlew test
... some output
:runScript
RUNNING MY SCRIPT
:module1:test
RUNNING MODULE1 TESTS
... some output
:module2:test
RUNNING MODULE2 TESTS
我试过的东西
我尝试将outputs.upToDateWhen{false}
添加到任务runScript
,因此Gradle从不认为它是最新的。这没什么区别;我假设任务在任务图中只发生一次
我尝试用test.doFirst{runScript.execute()}
替换每个模块中包含dependsOn
的行。当任务被执行时,这种情况会发生变化,但不会导致多次执行
$ ./gradlew test
... some output
:module1:test
RUNNING MY SCRIPT
RUNNING MODULE1 TESTS
... some output
:module2:test
RUNNING MODULE2 TESTS
我尝试为每个模块创建一个新任务。这是可行的,但它复制了代码
project(':module1') {
evaluationDependsOn(':module1')
final test = tasks.findByName('test')
task runScript(type: Exec) {
workingDir '../scripts'
commandLine 'python3', 'myscript.py'
}
test.dependsOn(runScript)
}
project(':module2') {
evaluationDependsOn(':module2')
final test = tasks.findByName('test')
task runScript(type: Exec) {
workingDir '../scripts'
commandLine 'python3', 'myscript.py'
}
test.dependsOn(runScript)
}
如果每个
测试
任务的每次运行都需要脚本,只需确保在每个测试
任务之前执行脚本即可。那么为什么还要使用任务呢
subprojects {
tasks.withType(Test) {
doFirst {
exec {
workingDir 'scripts'
commandLine 'python3', 'myscript.py'
}
}
}
}
这行不通。渐变任务在生成中只能运行一次。如果需要设置,则应使用任务特定设置的
doFirst
方法或测试特定设置的beforeTest
方法。我希望定义任务以避免代码重复。在这个示例中,我发布了运行脚本所需的所有测试。在我的实际项目中,只有一个子集运行脚本,因为它很昂贵,而且并不总是必需的。我需要分别向任务添加任务或exec。感谢您的帮助:-)您可以使用tasks.withType(Test)。匹配{/*any condition*/}
来配置任务的子集。