Как сделать так, чтобы пользовательская задача не повторяла работу, если входные файлы не изменились?

У меня есть настройка нескольких проектов -для игры. Существует очень специфический подпроект под названием «ресурсы», который содержит только такие файлы, как изображения, звуки и текстовые файлы, которые нужно упаковать в банку.

У меня есть пользовательская задача, которая обрабатывает изображения и упаковывает их. Внутри «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 , но я не понимаю, как его адаптировать к моей задаче.

Как я могу сделать так, чтобы моя пользовательская задача не переделывала работу, если файлы в подпапке из списка папок не были изменены?

7
задан Tomas Lazaro 24 July 2012 в 23:26
поделиться