只有在别人不在时才运行任务

我想在Gradle中进行功能测试时自动添加一个serverRun任务,所以我添加了一个依赖项:

funcTestTask.dependsOn(serverRun)

这导致任务运行,无论funcTestTask是否运行

:compile
:serverRun
:funcTestTask (and associate compile tasks... etc)
:serverStop

OR

:compile UP-TO-DATE
:serverRun <-- unnecessary 
:funcTestTask UP-TO-DATE
:serverStop

启动服务器的成本相当高,我只希望它启动如果functionalTest 不是 UP-TO-DATE,我想要做或什么:

if(!funcTestTask.isUpToDate) {
    funcTestTask.dependsOn(serverRun)
}

所以我知道我不知道funcTestTask的最新状态,直到它的所有输入/输出都决定了,但我可以继承它的日期检查器吗?

serverRun.outputs.upToDateWhen(funcTestTask.upToDate)

另一种方法是在FuncTest中“doFirst”ServerRun,我相信这通常是不被接受的?

funcTestTask.doFirst { serverRun.execute() }

有没有办法在另一个之前有条件地运行任务?

更新1
尝试设置输入/输出相同

serverRun.inputs.files(funcTestTask.inputs.files)
serverRun.outputs.files(funcTestTask.outputs.files)

这似乎重新运行服务器上重新编译(良好),跳过重试后成功不变的功能测试(也很好),但不会重新运行测试后失败的测试如下

:compile
:serverRun
:funcTestTask FAILED

then

:compile UP-TO-DATE
:serverRun UP-TO-DATE <-- wrong!
:funcTestTask FAILED

面对同样的问题,我找到了一个非常干净的解决方案。 在我的情况下,我希望在运行构建时生成eclipse项目设置,但只有在生成新jar时才会生成。 当jar是最新的时候,不应该执行任何项目设置。 以下是如何实现这一点的:

tasks.eclipse {
  onlyIf {
    !jar.state.upToDate
  }
}

build {
  dependsOn tasks.eclipse
}

我最终写了一个'失败文件',并在serverRun任务上做了一个输入

File serverTrigger = project.file("${buildDir}/trigger") 

project.gradle.taskGraph.whenReady { TaskExectuionGraph taskGraph ->
  // make the serverRun task have the same inputs/outputs + extra trigger
  serverRun.inputs.files(funcTestTask.inputs.files, serverTrigger)
  serverRun.outputs.files(funcTestTask.outputs.files)
}

project.gradle.taskGraph.afterTask { Task task, TaskState state ->
  if (task.name == "funcTestTask" && state.failure) {
    serverRun.trigger << new Date()
  }
}

与来自我的问题在Gradle论坛上的答案信息:http://forums.gradle.org/gradle/topics/how-can-i-start-a-server-conditional-before-a-functionaltestrun


由于该任务是您试图控制的任务的依赖任务,因此您可以尝试:

tasks {
    onlyIf {
        dependsOnTaskDidWork()
    }
}
链接地址: http://www.djcxy.com/p/24291.html

上一篇: Only run task if another isn't UP

下一篇: nuget pack on csproj for readme.txt not behaving as expected