Gradle写入属性:doLast中的属性不起作用

rsl1atfo  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(265)

Gradle写入属性:doLast中的属性不起作用。

task foo(type: WriteProperties) {

    doLast {

        def value = getValueFromFile()
        property 'foo', value
    }
 }

doLast中的属性foo被忽略。

nwlls2ji

nwlls2ji1#

查看build script basicsdoLast { }在任务动作列表的末尾执行。换句话说,首先执行主任务的操作,然后执行任何doLast操作。
您所做的是在任务执行后配置属性foo。由于之前没有配置要写入的属性,foo任务本质上是noop,因为没有配置任何输入。
此外,您还没有将该文件声明为任务的输入。这将导致incremental builds支持不佳。
完整示例:

tasks.register("foo", WriteProperties::class) {
    outputFile = layout.buildDirectory.file("foo.properties").get().asFile
    val examplePropertiesFile = layout.projectDirectory.file("example.properties")

    // Declare the file as input to the task to allow Gradle to track
    inputs.file(examplePropertiesFile)

    // Lazily compute/read the value
    val examplePropsValue = provider {
        val props = Properties()
        examplePropertiesFile.asFile.inputStream().use {
            props.load(it)
        }
        props["foo"]
    }

    // Configure the property for the task
    property("foo", examplePropsValue)
}

相关问题