我需要在Gradle的执行阶段创建和执行任务。
目前,在我的构建任务,我确定并创建多个任务,我添加到taskContainer,使用:
tasks.add([name: "$taskName", type: "$taskType"], {...})
,然后在添加所有任务后依次执行它们,使用:
tasks["$taskName"].execute()
第一次执行,我得到以下错误:
>任务工件状态缓存(…/.gradle/1.5/taskArtifacts)未被锁定
我做错了什么,有没有更好的方法在执行过程中动态添加任务?
必须在配置阶段声明所有任务和任务依赖项。它们不能在执行阶段添加。此外,不支持调用task.execute()
(并且会导致问题)。一个任务可以依赖于其他任务,但是它不能调用它们。
您可以在配置阶段创建任务。
afterEvaluate{
project.getTasks().create("name", org.gradle.api.tasks.JavaExec,
{ task -> defineRunTask project, task, application })
}
这将允许您在配置阶段结束时动态地创建一个任务。
为了执行任务,您只需添加那些依赖于此任务列表的任务,如:
afterEvaluate {
project.tasks.forEach{ task -> {
project.tasks.compileJava.dependsOn task
}
}