我是Gradle的新手,并且遇到了创建自定义任务的麻烦,可以正确地确定它何时更新。我想根据其他输入变量在自定义任务的构造函数中设置用@OutputFile修饰的成员,但它们都设置为构造函数中的默认值。我确实在TaskAction中看到了正确设置的值。
我确定我错过了一些简单的东西,但我已经梳理过这些文档,试图挖掘出一些例子并且我找不到太多。
以下是构建脚本的简化版本:
apply plugin: 'java'
sourceCompatibility = 1.5
version = '1.0'
class TestTask extends DefaultTask {
@Input
String [] className = []
@Input
String outputDir = ""
@OutputFile
File targetFile
TestTask() {
println("Constructor")
println("outputDir: " + outputDir)
// I'd like to set the targetFile here, based on the outputDir and className
}
@TaskAction
def action() {
println("Action")
println("outputDir: " + outputDir )
}
}
task runTest_Opus(type:TestTask) {
className = ['class.name.here']
outputDir = 'jni/outputDir/'
}
task runAll {
dependsOn tasks.withType(TestTask)
}
build.dependsOn.add("runAll")
答案 0 :(得分:4)
如果派生targetFile
的值,则使用getter方法而不是实例字段。
@OutputFile
File getTargetFile() {
// code to resolve output file based on other inputs
}
答案 1 :(得分:0)
根据您的具体需求,@OutputDirectory File outputDir
可能是一个简单的解决方案。派生默认值通常由插件设置。无论如何,他们的计算需要以某种方式推迟(例如project.afterEvaluate { ... }
)。