В общем, если вы хотите сообщить задаче, как узнать, актуальна она или нет, вам нужно определить inputs
и outputs
.Это то, что говорит Gradle, является ли задача актуальной или нет.Если ничего не изменилось во входах или выходах с момента последнего запуска задачи, Gradle знает, что она обновлена, и не будет повторно выполнять задачу.
В вашем случае входные данные будут исходной папкой,и на выходе будет баночка.Это объясняется в документации Gradle здесь .Вы можете увидеть пример в этой статье, которая показывает, как Gradle может вызывать Webpack, но только если что-то изменилось.
Таким образом, вы можете сделать что-то вроде этого:
tasks {
"shadowJar"(ShadowJar::class) {
// all the stuff you already have, plus these two new lines:
inputs.dir("... the source dir ...")
outputs.file("... the generated jar ...")
}
}
Однако я предполагаю, что задача shadowTask
, которую вы используете, отсюда: https://github.com/johnrengelman/shadow?Если это так, вам, возможно, на самом деле не нужно устанавливать inputs
и outputs
напрямую, так как задача уже сама их устанавливает.Например, если вы посмотрите на исходный код этого плагина, вы увидите, что он помечает один метод с помощью @InputFiles
(см. здесь ).Это, согласно документам:
Помечает свойство как указание входных файлов для задачи.
Выходные данные также указываются в одном из суперклассов (AbstractArchiveTask.getArchiveFile
).