Groovy Gradle任务从来都不是最新的

Groovy Gradle任务从来都不是最新的,groovy,gradle,build,mirah,Groovy,Gradle,Build,Mirah,在任务的配置阶段,我将一些目录注册为builtBy:thisTask。我希望gradle自动检测源是否已更改,但任务始终在执行。 任务如下: subprojects { def srcMainMirah = file('src/main/mirah') if (srcMainMirah.exists()) { idea.module.sourceDirs += srcMainMirah task compileMirah {

在任务的配置阶段,我将一些目录注册为
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语言编译源代码,它会像java编译器一样生成
*.class
文件。

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

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

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


从。

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

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

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


From.

output.dir(classesMirahMain,builtBy:ThistTask)
应该将
classesMirahMain
dir注册为
ThistTask
的输出,不是吗?output dir仅自动识别为
Copy
output.dir(classesMirahMain,builtBy:ThistTask)类型的任务的输出
应该将
classesMirahMain
dir注册为
此任务的输出,不是吗?输出dir仅自动识别为
Copy类型的任务的输出