Как вы расширяете задачу для Gradle при использовании Kotlin для реализации плагина? - PullRequest
0 голосов
/ 17 января 2019

Мне кажется, что этот ответ прост, но я не могу его найти.

Я пытаюсь создать расширение Gradle с Kotlin. Первая задача, которую я делаю, - это эффективный вызов задачи 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
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Я думаю, что нашел решение, похоже, from и into - это функции.

@TaskAction
fun copyFiles() {
    inputDirectory.apply {
        parentFile.mkdirs()
    }
    project.copy{ copySpec ->
        copySpec.from(inputDirectory)
        copySpec.into(outputDirectory)
    }
}
0 голосов
/ 17 января 2019

Вы объявляете новые значения для from и into вместо того, чтобы назначать существующие.

Ваш код должен быть:

    @TaskAction
fun copyFiles() {
    inputDirectory.apply {
        parentFile.mkdirs()
    }
    project.copy{
        from(inputDirectory)
        into(outputDirectory)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...