Gradle在其执行阶段,动态添加和执行任务

Gradle在其执行阶段,动态添加和执行任务,gradle,Gradle,我需要在Gradle的执行阶段创建和执行任务 afterEvaluate{ project.getTasks().create("name", org.gradle.api.tasks.JavaExec, { task -> defineRunTask project, task, application }) } 目前,在生成任务期间,我确定并创建了多个任务,并使用以下方法将其添加到taskContainer中: tasks.add([名称:

我需要在Gradle的执行阶段创建和执行任务

afterEvaluate{
    project.getTasks().create("name", org.gradle.api.tasks.JavaExec,
        { task -> defineRunTask project, task, application })
}
目前,在生成任务期间,我确定并创建了多个任务,并使用以下方法将其添加到taskContainer中:

tasks.add([名称:$taskName],类型:$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.getTasks().create("name", org.gradle.api.tasks.JavaExec,
        { task -> defineRunTask project, task, application })
}
为了执行任务,只需添加依赖于此任务列表的任务,如:

afterEvaluate {
    project.tasks.forEach{ task -> {
        project.tasks.compileJava.dependsOn task
    }
}

为什么你要在执行过程中添加它们,而不是在构建的配置阶段添加它们?@HieryNomus在配置阶段这样做会让我的蜘蛛感到刺痛,因为我需要在知道要构建多少个目标之前拉下资源。据我所知,调用
gradletasks
会拖累构建资源,这既不理想也不符合预期。