在Gradle(6.2)中,我们可以将自定义任务的构造函数参数标注为“input”吗?

8zzbczxx  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(126)

假设我有一个自定义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的Angular 来看,在构造函数中注入所有这些输入/输出值是很好的,但我想知道,这可能吗?

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

nkcskrwz1#

实际上,它的工作原理就像我上面问的那样!
我没想到会这样,根据文件,这就是为什么我最初问这个问题。
但是下面的任务,在Kotlin(在/buildSrc下)中定义如下:

open class TaskA @Inject constructor(
        @InputFile var inputFile : File,
        @OutputFile var outputFile : File
): DefaultTask() {

    @TaskAction
    fun doIt() {
        val contents = inputFile.readText()
        val result = contents.replace("a", "b")
        outputFile.parentFile.mkdirs()
        outputFile.writeText(result)
    }
}
3qpi33ja

3qpi33ja2#

这两个注解的javadoc声明(强调我的):
@InputFile
此注解 * 应 * 附加到getter方法(Java中)或属性(Groovy中)。setter上的注解或Java中的字段将被忽略。
@OutputFile
这个注解 * 应该 * 附加到getter方法(Java中)或属性(Groovy中)。setter上的注解或Java中的字段会被忽略
要回答您的问题:没有。
Kotlin、Java或Groovy中的构造函数参数既不是getter,也不是属性,因此会被忽略。

相关问题