Gradle任务永远不会是最新的

时间:2016-01-14 09:33:38

标签: groovy gradle build mirah

在任务的配置阶段,我将一些目录注册为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编译器一样。

1 个答案:

答案 0 :(得分:5)

单独为任务声明输入不足以确定任务是否是最新的。您还需要声明task.outputs

  

没有定义输出的任务将 从不 视为最新。对于任务输出不是文件或更复杂场景的情况,TaskOutputs.upToDateWhen()方法允许您以编程方式计算任务输出是否应该被认为是最新的。

     

如果这些输出自上一次构建以来没有改变,那么仅定义了输出的任务将被视为最新。

来自section 17.9.1 here