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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

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

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

这个编译,插件被Gradle识别。有(至少)2个问题。编译器抱怨from和/ into或没有使用。我的第一个线索是我做错了什么。第二个是当我运行任务时Gradle告诉我这个错误:

* What went wrong:
Execution failed for task ':gsqlCopySources'.
> Cannot convert path to File. path='null'

码:

import org.gradle.api.DefaultTask
import com.optum.giraffle.GsqlExtension
import org.gradle.api.tasks.*
import java.io.File

open class CopySources: DefaultTask() {

    private val extension = project.extensions.run {
        findByName("gsql") as GsqlExtension
    }
    @OutputDirectory
    val outputDirectory: File = project.file("${project.buildDir}/${extension.scriptPath}")

    @InputDirectory
    val inputDirectory: File = project.file("${project.rootDir}/${extension.scriptPath}")

    init {
        group = "build"
        description = "Copy gsql scripts to build directory performing token replacement"

    }

    @TaskAction
    fun copyFiles() {
        inputDirectory.apply {
            parentFile.mkdirs()
        }
        project.copy{
            val from = inputDirectory
            val into = outputDirectory
        }
    }
}
提问于
用户回答回答于

我想我已经找到了解决办法,它看起来像frominto的功能。

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

您正在声明新值,frominto不是分配现有值。

你的代码应该是:

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

扫码关注云+社区

领取腾讯云代金券