我有一个游戏的多项目设置.有一个非常具体的子项目叫做"资源",只包含要打包到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常见问题,但我不明白如何使其适应我的任务.
如果未修改文件夹列表中子文件夹中的文件,如何使我的自定义任务避免重做工作?