在使用Kotlin实现插件时,如何扩展Gradle的任务?

在使用Kotlin实现插件时,如何扩展Gradle的任务?,gradle,kotlin,Gradle,Kotlin,我觉得这个答案很简单,但是我找不到 我正试图用Kotlin创建一个Gradle扩展。我正在做的第一个任务是有效地调用project.copy任务,这样我就可以将源文件移动到构建目录并执行令牌替换(我知道,我还没有实现) 这是编译的,Gradle可以识别插件。有(至少)两个问题。编译器抱怨从和进入或未使用。我的第一个线索是我做错了什么。第二个是,当我运行任务时,Gradle告诉我以下错误: *出了什么问题: 任务“:gsqlCopySources”的执行失败。 >无法将路径转换为文件。路径='nu

我觉得这个答案很简单,但是我找不到

我正试图用Kotlin创建一个Gradle扩展。我正在做的第一个任务是有效地调用
project.copy
任务,这样我就可以将源文件移动到构建目录并执行令牌替换(我知道,我还没有实现)

这是编译的,Gradle可以识别插件。有(至少)两个问题。编译器抱怨
进入
或未使用。我的第一个线索是我做错了什么。第二个是,当我运行任务时,Gradle告诉我以下错误:

*出了什么问题:
任务“:gsqlCopySources”的执行失败。
>无法将路径转换为文件。路径='null'
代码:


您正在为
声明新值,而不是分配现有值

您的代码应该是:

    @TaskAction
fun copyFiles() {
    inputDirectory.apply {
        parentFile.mkdirs()
    }
    project.copy{
        from(inputDirectory)
        into(outputDirectory)
    }
}

我想我已经找到了解决方案,看起来
from
into
都是函数

@TaskAction
fun copyFiles() {
    inputDirectory.apply {
        parentFile.mkdirs()
    }
    project.copy{ copySpec ->
        copySpec.from(inputDirectory)
        copySpec.into(outputDirectory)
    }
}

这仍然不起作用。我得到了未解析的引用,没错。从gradle到kotlin的翻译可能会造成这种混乱。实际上,在副本内部,您可以访问
copySpec
作为
this
,因此不需要实际指定parameter@EricMartori是的,我尝试过使用
这个
,它确实有效。我使用的IDE建议使用一个显式命名的参数,所以我这样做了。
@TaskAction
fun copyFiles() {
    inputDirectory.apply {
        parentFile.mkdirs()
    }
    project.copy{ copySpec ->
        copySpec.from(inputDirectory)
        copySpec.into(outputDirectory)
    }
}