Вам необходимо зарегистрировать каталог libs как ввод задачи для задачи updateJar. Это позволяет gradle знать, что выходные данные задачи updateJar зависят от содержимого каталога libs (это автоматически выполняется в случае задачи copyAar, потому что она обращается к своим входам декларативно. Задача updateJar имеет программный характер c, поэтому gradle может не понять это автоматически).
Добавление следующего в определение задачи updateJar поможет:
inputs.dir('libs')
Вы также можете заметить, что gradle пропускает задачу, когда директория libs не установлена. не изменились, поскольку настройки входов и выходов также управляют кэшированием.
Обратите внимание, что в приведенном выше примере c есть еще одна проблема: задача updateJar выполняет работу во время конфигурации, а не при ее выполнении. время. Это имеет ряд негативных последствий, таких как добавочное кэширование работы невозможно, задача updateJar выполняет работу, даже если она не выполняется.
Это можно исправить, обернув часть, которая работает в блок doFirst {} .
Соберите все это вместе, и определение задачи будет выглядеть так:
task('updateJar') {
doFirst {
def files = fileTree("libs").filter { it.isFile() }.files.name
if(!files.size() ==1) {
throw new GradleException('Error occured - In the libs folder, should be only one JAR file!')
}
def newJarFileName = files.first()
def newSDKVersion = newJarFileName.substring(0,newJarFileName.lastIndexOf('.'))
println newSDKVersion
def versionPropsFile = file('version.properties')
Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
versionProps['VERSION_SDK'] = newSDKVersion
versionProps.store(versionPropsFile.newWriter(), null)
}
inputs.dir('libs')
}