Gradle 无法将doFirst操作添加到";任务“;task.找不到参数的方法doFirst()

Gradle 无法将doFirst操作添加到";任务“;task.找不到参数的方法doFirst(),gradle,build.gradle,Gradle,Build.gradle,我正在尝试调用doFirst对“任务”任务的操作。这里我指的是名为“tasks”的任务,当我们运行命令“gradle tasks--all”时,我们会在helper tasks下看到它 编辑1开始 我的身材。格拉德尔: tasks.doFirst{ println "First executed"} 编辑1结尾 它给了我以下错误: Could not find method doFirst() for arguments [build_3m21dsbdvnnfh1sf7441k5d5v$_ru

我正在尝试调用
doFirst
“任务”任务的操作。这里我指的是名为“tasks”的任务,当我们运行命令“gradle tasks--all”时,我们会在helper tasks下看到它

编辑1开始

我的身材。格拉德尔

tasks.doFirst{ println "First executed"}
编辑1结尾

它给了我以下错误:

Could not find method doFirst() for arguments [build_3m21dsbdvnnfh1sf7441k5d5v$_run_closure5@2cad909f] on task set of type org.gradle.api.internal.tasks.DefaultTaskContainer
我通过运行命令
gradle help--task tasks

它说类型是
TaskReportTask(org.gradle.api.tasks.diagnostics.TaskReportTask)

然后我导航到
TaskReportTask
API文档。根据文档,这个类从class
org.gradle.api.internal.AbstractTask
继承了方法
doFirst
。我很困惑,如果它继承了doFirst()方法,为什么它不起作用


非常感谢这方面的任何指导。

问题在于,您试图在属性
任务
上调用方法
doFirst
,它实际上是
项目.tasks
项目
项目的
TaskContainer
实例,请参阅),而不是名为
任务
任务
对象

请改用以下方法:

project.tasks.getByName("tasks").doFirst {
    println "do something before task [tasks] executes"
}

问题在于,您试图在属性
任务
上调用方法
doFirst
,该属性实际上是
项目.tasks
(项目
任务容器
的实例,请参见),而不是名为
任务
任务
对象

请改用以下方法:

project.tasks.getByName("tasks").doFirst {
    println "do something before task [tasks] executes"
}

能否请您发布脚本中尝试调用
doFirst
method的部分?@M.Ricciuti我已经编辑了我的帖子以包含构建脚本。这就是我的文件中的全部内容。您可以发布脚本中您尝试调用
doFirst
method的部分吗?@M.Ricciuti我已经编辑了我的帖子,以包含构建脚本。我的档案就这些了。谢谢@M.Ricciuti。我现在意识到了错误。还在Gradle in Action book的第4章,还没有遇到“TaskContainer”。基本上,我被第4.2.2节的陈述误导了:
如果您想为非自己编写的任务执行自定义逻辑,这尤其有用。例如,您可以将doFirst操作添加到Java插件的compile-Java任务中,该任务检查项目是否至少包含一个Java源文件
。但是你说得非常清楚。谢谢@M.Ricciuti。我现在意识到了错误。还在Gradle in Action book的第4章,还没有遇到“TaskContainer”。基本上,我被第4.2.2节的陈述误导了:
如果您想为非自己编写的任务执行自定义逻辑,这尤其有用。例如,您可以将doFirst操作添加到Java插件的compile-Java任务中,该任务检查项目是否至少包含一个Java源文件
。但你说得很清楚。