在任务的配置阶段,我将一些目录注册为builtBy: thisTask
。我希望gradle能够自动检测源是否已更改,但任务始终正在执行
这是任务:
subprojects {
def srcMainMirah = file('src/main/mirah')
if (srcMainMirah.exists()) {
idea.module.sourceDirs += srcMainMirah
task compileMirah {
def classesMirahMain = file("$buildDir/classes-mirah/main")
inputs.sourceDir srcMainMirah
def thisTask = delegate
sourceSets.main {
output.dir(classesMirahMain, builtBy: thisTask)
java.srcDir srcMainMirah
}
dependsOn tasks.compileJava
doFirst {
def classpath = files("$buildDir/classes/main").plus(configurations.compile)
mirahc(srcMainMirah, classesMirahMain, classpath)
}
}
}
}
用于编译mirah语言的源代码,它可以生成*.class
文件,就像java编译器一样。
答案 0 :(得分:5)
单独为任务声明输入不足以确定任务是否是最新的。您还需要声明task.outputs
没有定义输出的任务将 从不 视为最新。对于任务输出不是文件或更复杂场景的情况,
TaskOutputs.upToDateWhen()
方法允许您以编程方式计算任务输出是否应该被认为是最新的。如果这些输出自上一次构建以来没有改变,那么仅定义了输出的任务将被视为最新。