相关疑难解决方法(0)

如果输入文件不变,如何使自定义任务避免重做工作?

我有一个游戏的多项目设置.有一个非常具体的子项目叫做"资源",只包含要打包到jar中的图像,声音和texfiles等文件.

我有一个自定义任务来处理图像并打包它们.在'src/main'里面,我正在使用一个文件夹'preprocess',其中图像应该去,而'unmanaged'文件夹,其他一切都在这里.通过运行我的任务,'preprocess'中的所有图像都被打包并输出到'resources','unmanaged'中的所有图像都按原样复制.

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"))
}
Run Code Online (Sandbox Code Playgroud)

然后在'资源'项目的设置内:

...
packageBin in Compile <<= packageBin in Compile dependsOn(texturePacker)
...
Run Code Online (Sandbox Code Playgroud)

其他子项目依赖于与其运行相关联的packageBin.这样,每当我运行项目时,我都会获得最新的资源状态.我不希望它是按需的.问题是每次运行需要很长时间才能处理.我知道SBT支持缓存SBT常见问题,但我不明白如何使其适应我的任务.

如果未修改文件夹列表中子文件夹中的文件,如何使我的自定义任务避免重做工作?

scala sbt

7
推荐指数
1
解决办法
891
查看次数

标签 统计

sbt ×1

scala ×1