在任务的配置阶段,我将一些dir注册为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编译器一样。
发布于 2016-01-19 00:52:54
单独声明任务的输入不足以确定任务是否是最新的。您也需要声明task.outputs
没有定义输出的任务永远不会被认为是最新的。对于任务的输出不是文件的场景,或者对于更复杂的场景,
TaskOutputs.upToDateWhen()方法允许您以编程方式计算任务是否应该是最新的。 只有定义了输出的任务将被视为最新的,如果这些输出是不变的,自上一次构建。
来自第17.9.1节。
https://stackoverflow.com/questions/34785969
复制相似问题