В Gradle (6.2) мы можем аннотировать параметры конструктора пользовательской задачи как «ввод»? - PullRequest
0 голосов
/ 22 февраля 2020

Скажем, у меня есть пользовательская задача gradle:

open class CustomTask @Inject constructor(
    private val inputFile: File,
    private val outputFile: File
    ) : DefaultTask()

(на основе https://docs.gradle.org/current/userguide/more_about_tasks.html#sec: Passing_arguments_to_a_task_constructor ).

В Gradle, до сих пор, общая способ определить входы или выходы с помощью аннотаций, таких как InputFile .

С точки зрения Kotlin, было бы неплохо ввести все эти значения ввода / вывода в конструктор, но я мне интересно, это возможно? Что-то вроде:

open class CustomTask @Inject constructor(
private @InputFile val inputFile: File,
private @OutputFile val outputFile: File

): DefaultTask ()

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

На самом деле, это работает так, как я просил выше!

Я не ожидал, что так и будет, исходя из документов, поэтому я изначально задал вопрос.

Но следующее Задача, определенная так в Kotlin (в / buildSr c), работает:

open class TaskA @Inject constructor(
        @org.gradle.api.tasks.InputFile var inputFile : File,
        @org.gradle.api.tasks.OutputFile var outputFile : File
) : DefaultTask() {

    @TaskAction
    fun doIt() {
        val contents = inputFile.readText()
        val result = contents.replace("a", "b")
        outputFile.parentFile.mkdirs()
        outputFile.writeText(result)
    }
}
0 голосов
/ 22 февраля 2020

Javadocs для состояния обеих аннотаций (выделено мной):

@InputFile

Эта аннотация должна быть прикреплена к метод получения в Java или свойство в Groovy. Аннотации на сеттеры или просто поле в Java игнорируются.

@OutputFile

Эта аннотация следует присоединить к методу getter в Java или свойство в Groovy. Аннотации для сеттеров или просто поле в Java игнорируются .

Чтобы ответить на ваш вопрос: нет.

Аргументы конструктора в Kotlin, Java или Groovy не являются ни получателями, ни свойствами, поэтому они игнорируются.

...