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

标签 gradle gradle-kotlin-dsl

假设我有一个自定义 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 的角度来看,在构造函数中注入(inject)所有这些输入/输出值会很好,但我想知道, 是否可以?像这样的东西:

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

最佳答案

实际上,它就像我上面问的那样工作!

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

但是在 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)
    }
}

关于gradle - 在 Gradle (6.2) 中,我们可以将自定义任务的构造函数参数注释为 "input"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60346932/

相关文章:

使用 wsdl2java 的 Gradle Kotlin DSL

java - Gradle Kotlin DSL : subdirectory for javadoc in jar file

gradle - 使用 gradle 构建使用 stanford-corenlp 作为依赖项的 jar 文件时出错

android - 程序类型已经存在 : android. support.v4.app.INotificationSideChannel$Stub$Proxy

android - 如何修复 “Execution failed for task ':app:mergeDebugResources的“”错误?

android - 在 Android Studio 和 Gradle 的 Android App Module 中使用不同构建类型的 Library Module

ant - 使用 gradle-script-kotlin 中的 ant 任务

android - 将 build.gradle 迁移到 build.gradle.Kts : Not able to resolve Properties class

gradle - Heroku 无法识别 gradle - 找不到 pom.xml 文件

Android gradle,它是什么?