是否可以为内联Gradle任务定义属性

时间:2019-06-18 11:14:29

标签: gradle

https://docs.gradle.org/current/userguide/more_about_tasks.html显示了如何通过extends DefaultTask定义任务属性的示例。

可以使用任务内联定义语法直接定义任务属性,例如:

task collectSqlFiles {
    FileCollection sqlFiles
    doLast {
        sqlFiles = fileTree("$rootDir/function", sqlFilePatt) +
                 fileTree("$rootDir/maintenance", sqlFilePatt) +
                 fileTree("$rootDir/monitoring", sqlFilePatt) +
                 fileTree("$rootDir/view", sqlFilePatt)
    }
}

task printSqlFiles {
    dependsOn collectSqlFiles

    doLast {
        // Got:  Could not get unknown property 'sqlFiles' for task ':collectSqlFiles'
        // of type org.gradle.api.DefaultTask.
        collectSqlFiles.sqlFiles.forEach { logger.lifecycle("sqlFile: {}", it) }
    }
}

1 个答案:

答案 0 :(得分:0)

似乎ExtensionAware的Gradle域对象本质上具有ExtraPropertiesExtension的名为“ ext”的扩展名。

内联taskDefaultTask,它实现了ExtensionAware

解决方法是:

task collectSqlFiles {
    FileCollection sqlFiles
    doLast {
        // TAKE LOOK to "ext."
        ext.sqlFiles = fileTree("$rootDir/function", sqlFilePatt) +
                 fileTree("$rootDir/maintenance", sqlFilePatt) +
                 fileTree("$rootDir/monitoring", sqlFilePatt) +
                 fileTree("$rootDir/view", sqlFilePatt)
    }
}

task printSqlFiles {
    dependsOn collectSqlFiles

    doLast {
        collectSqlFiles.sqlFiles.forEach { logger.lifecycle("sqlFile: {}", it) }
    }
}

请看官方Dynamic Properties部分。