Ich habe ein Multi-Projekt-Setup für ein Spiel. Es gibt ein sehr spezifisches Unterprojekt namens "Ressourcen", das nur Dateien wie Bilder, Sounds und Textdateien enthält, die in ein Glas gepackt werden sollen.Wie kann eine benutzerdefinierte Aufgabe vermieden werden, wenn die Eingabedateien unverändert bleiben?
Ich habe eine benutzerdefinierte Aufgabe, die Bilder verarbeitet und packt sie. Innerhalb 'src/main' benutze ich einen Ordner 'Vorverarbeitung', wo Bilder gehen und einen 'nicht verwalteten' Ordner, wo alles andere geht. Durch Ausführen meiner Aufgabe werden alle Bilder in 'Vorverarbeitung' gepackt und an 'Ressourcen' ausgegeben und alles in 'Nicht verwaltet' wird kopiert, wie es ist.
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"))
}
Und dann in den Einstellungen der ‚Ressourcen‘ Projekt:
...
packageBin in Compile <<= packageBin in Compile dependsOn(texturePacker)
...
Die anderen Teilprojekte haben eine Abhängigkeit von packageBin mit ihrem Laufe verbunden. Auf diese Weise erhalte ich jedes Mal, wenn ich das Projekt leite, den aktuellsten Stand der Ressourcen. Ich will nicht, dass es auf Nachfrage ist. Das Problem ist, dass die Verarbeitung für jeden Lauf sehr lange dauert. Ich weiß, SBT unterstützt Caching SBT FAQ, aber ich verstehe nicht, wie ich es an meine Aufgabe anpassen soll.
Wie kann ich meine benutzerdefinierte Aufgabe vermeiden, die Arbeit zu wiederholen, wenn die Dateien in einem Unterordner aus der Ordnerliste nicht geändert wurden?
Ich überarbeite den Code für meinen genauen Fall, aber ich habe es jetzt funktioniert dank Ihnen. Jetzt nur, wenn eine Datei in einem Ordner geändert wird, wird dieser Ordner allein erneut verarbeitet. Ich muss es ein bisschen aufräumen. Ich kann in einem Blog über die gesamte Konfiguration schreiben. –
Bitte poste einen Link zu deinem Beitrag, wenn du es tust. Hier –
ist ein funktionierendes SBT-Plugin-Caching: https://github.com/tlazaro/texture-packer-plugin/blob/71923eab9e4f626a0bdd1dbe8138733a42f474af/src/main/scala/com/starkengine/TexturePackerPlugin.scala#L28 –