我正在使用gradle-api开发Gradle自定义插件,需要设置一个始终执行的动作,例如配置任务。
我以这种方式创建了一些任务:
class MyTask extends DefaultTask {
@TaskAction
void myAction() throws Exception {
[my action code]
}
}
,然后添加为项目:
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.getTasks().create("myTask", MyTask.class)
}
}
...,这些方法有效:当我明确调用myTask目标时,它会执行,但是我需要每次都执行的任务,即使没有明确调用也是如此。
答案 0 :(得分:0)
如果要在每次运行grable时都执行代码,则可以直接将代码添加到apply
方法中,也可以在块afterEvaluate
内添加代码:
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.getTasks().create("myTask", MyTask.class)
// your code...
// or
project.afterEvaluate(proj -> {
// your code...
});
}
}
如果需要将代码专门放在task
中,则应将任务dependsOn
设置为现有任务(该任务已在DAG定向的非循环图中注册)。例如:
MyTask task = Tproject.getTasks().create("myTask", MyTask.class);
project.getTasks().findByName("assembleDebug").dependsOn(task);
关于dependsOn
,您可以在docs和this answer中看到。
已弃用:
此外,在旧版本的Gradle中,您可以执行yourTask.execute()
,但现在不推荐使用。
答案 1 :(得分:0)
最后我找到了方法:
该想法是将我的操作配置为配置。 我想有几种方法,但是我喜欢这种方法:
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
final MyTask myTask = project.getTasks().create(
"myTask", MyTask.class
)
project.getConfigurations().create(
"myTask",
{
myTask.myMethod()
}
)
}
}