在Gradle(6.2)中,我们是否可以将自定义任务的构造函数参数注释为;输入“;?

在Gradle(6.2)中,我们是否可以将自定义任务的构造函数参数注释为;输入“;?,gradle,gradle-kotlin-dsl,Gradle,Gradle Kotlin Dsl,假设我有一个自定义gradle任务: open class CustomTask @Inject constructor( private val inputFile: File, private val outputFile: File ) : DefaultTask() (基于) 到目前为止,在gradle中,定义输入或输出的常用方法是使用如下注释 从Kotlin的角度来看,将所有这些输入/输出值注入构造函数会很好,但我想知道, 可能吗?比如: open clas

假设我有一个自定义gradle任务:

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

到目前为止,在gradle中,定义输入或输出的常用方法是使用如下注释

从Kotlin的角度来看,将所有这些输入/输出值注入构造函数会很好,但我想知道, 可能吗?比如:

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

):DefaultTask()

两个注释的javadocs状态(emphasis mine):

此注释应附加到Java中的getter方法,或Groovy中的属性忽略setter上的注释或Java中的字段。

此注释应附加到Java中的getter方法,或Groovy中的属性。setter上的注释或Java中的字段被忽略

回答你的问题:不


Kotlin、Java或Groovy中的构造函数参数既不是getter,也不是属性,因此它们被忽略。

实际上,它的工作原理与我上面所说的一样

根据文档,我没想到会这样,这就是我最初问这个问题的原因

但以下任务在Kotlin(在/buildSrc下)中定义如下:


你试过这个吗?根据文件,这似乎是行不通的。但同时我也试过了,它似乎真的起作用了!
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)
    }
}