У меня есть пользовательская задача Gradle (с расширением JavaExec
), которая должна использовать добавочное здание, чтобы не выполняться большую часть времени:
task printFoo(type: JavaExec) {
inputs.dir ...
outputs.upToDateWhen( { return true } );
classpath = sourceSets.main.runtimeClasspath
main = "mypackage.MyMain"
}
На первый взгляд, это прекрасно работает: когда я запускаю задачу дважды, она запускается только один раз. Если я отредактирую некоторые из входных файлов, они будут перезапущены.
Проблема в том, что он будет перезапускаться каждый раз, когда я изменяю что-нибудь в моем исходном коде. Это имеет смысл, потому что JavaExec
имеет все мои исходные файлы в качестве входных данных, поскольку другая программа может делать разные вещи. Но так как это очень большой проект, большинство изменений в исходном коде ничего не изменит в результате выполнения этой задачи. Поэтому я не хочу перезапускать его, если что-то изменится в моем коде (возможно, за исключением основного класса, но он не изменится в ближайшее время, так что это необязательно).
Есть ли способ добиться такого поведения? Я пытался удалить файлы из inputs
, но, видимо, они инициализируются после моего кода. Я также думал о том, чтобы поместить эту задачу в buildSrc
, но это имеет ужасные последствия для зависимостей MyMain
от остальной части проекта.