Задача 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() Метод позволяет программно рассчитать, если результаты задач должны быть учтены в актуальном состоянии.

Задача, для которой определены только выходные данные, будет считаться актуальной, если эти выходные данные не изменились с момента предыдущей сборки.

Из раздела 17.9.1 здесь.

Другие вопросы по тегам