Задача Gradle никогда не обновляется
На этапе настройки задачи я регистрирую 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)
}
}
}
}
Это для компиляции источников на языке мирах, который производит *.class
файлы, как это делает компилятор Java.
1 ответ
Одного только ввода входных данных для задачи недостаточно, чтобы определить, является ли задача актуальной. Вы также должны объявить task.outputs
Задача без определенных результатов никогда не будет считаться актуальной. Для сценариев, где выходные данные задачи не являются файлами, или для более сложных сценариев,
TaskOutputs.upToDateWhen()
Метод позволяет программно рассчитать, если результаты задач должны быть учтены в актуальном состоянии.Задача, для которой определены только выходные данные, будет считаться актуальной, если эти выходные данные не изменились с момента предыдущей сборки.