У меня есть настройка нескольких проектов -для игры. Существует очень специфический подпроект под названием «ресурсы», который содержит только такие файлы, как изображения, звуки и текстовые файлы, которые нужно упаковать в банку.
У меня есть пользовательская задача, которая обрабатывает изображения и упаковывает их. Внутри «src/main» я использую папку «preprocess», куда должны помещаться изображения, и «неуправляемую» папку, куда помещается все остальное. При выполнении моей задачи все изображения в «предварительной обработке» упаковываются и выводятся в «ресурсы», а все в «неуправляемом» копируется как есть.
val texturePacker = TaskKey[Unit]("texture-packer", "Runs libgdx's Texture Packer")
val texturePackerTask = texturePacker := {
println("Packaging textures...")
val inputDir = file("resources/src/main/preprocess")
val outputDir = file("resources/src/main/resources")
val folders = inputDir.asFile.listFiles filter (_.isDirectory)
println("Sub-Folders:" + folders.mkString(", "))
// Run Texture Packer
for (subfolder <- folders) {
println("Building assets for:" + subfolder)
val args = Array(subfolder.toString, outputDir.toString, subfolder.getName)
com.badlogic.gdx.tools.imagepacker.TexturePacker2.main(args)
}
// Copy unmanaged resources
IO.copyDirectory(file("resources/src/main/unmanaged"), file("resources/src/main/resources"))
}
А потом в настройках проект 'resources':
...
packageBin in Compile <<= packageBin in Compile dependsOn(texturePacker)
...
Другие подпроекты зависят от packageBin, связанного с их запуском. Таким образом, всякий раз, когда я запускаю проект, я получаю самую последнюю информацию о состоянии ресурсов. Я не хочу, чтобы это было по требованию. Проблема в том, что обработка каждого запуска занимает много времени. Я знаю, что SBT поддерживает кэширование SBT FAQ , но я не понимаю, как его адаптировать к моей задаче.
Как я могу сделать так, чтобы моя пользовательская задача не переделывала работу, если файлы в подпапке из списка папок не были изменены?