मेरे पास एक गेम के लिए एक बहु-परियोजना सेटअप है। 'संसाधन' नामक एक बहुत ही विशिष्ट उप परियोजना है जिसमें केवल जार में पैक होने वाली छवियों, ध्वनियों और टेक्साफ़ाइल जैसी फ़ाइलें शामिल हैं।कस्टम कार्य कैसे करें यदि इनपुट फ़ाइलें अपरिवर्तित हों तो कार्य को फिर से शुरू करने से बचें?
मेरे पास एक कस्टम कार्य है जो छवियों को संसाधित करता है और उन्हें पैक करता है। '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"))
}
और फिर सेटिंग्स के अंदर 'संसाधनों' परियोजना:
...
packageBin in Compile <<= packageBin in Compile dependsOn(texturePacker)
...
अन्य उप परियोजनाओं उनके रन के साथ जुड़े packageBin पर निर्भरता है। इस तरह जब भी मैं प्रोजेक्ट चलाता हूं, मुझे संसाधनों की सबसे अद्यतित स्थिति मिलती है। मैं नहीं चाहता कि यह मांग पर हो। समस्या यह है कि हर रन के लिए प्रक्रिया करने में काफी समय लगता है। मुझे पता है कि एसबीटी SBT FAQ कैशिंग का समर्थन करता है लेकिन मुझे समझ में नहीं आता कि इसे मेरे कार्य में कैसे अनुकूलित किया जाए।
अगर मैं फ़ोल्डर्स सूची से सबफ़ोल्डर में फ़ाइलों को संशोधित नहीं किया गया तो मैं अपने कस्टम कार्य को फिर से काम करने से कैसे रोक सकता हूं?
मैं अपने सटीक मामले के लिए कोड पुनः काम कर रहा हूं लेकिन अब मुझे यह काम मिल रहा है धन्यवाद। अब केवल तभी जब एक फ़ाइल के अंदर एक फ़ाइल संशोधित की जाती है कि फ़ोल्डर को फिर से संसाधित किया जाता है। मुझे इसे थोड़ा साफ करना है। मैं पूरे कॉन्फ़िगरेशन के बारे में ब्लॉग में लिख सकता हूं। –
यदि आप करते हैं तो कृपया अपनी पोस्ट के लिए एक लिंक पोस्ट करें। –
यहाँ एक काम कर एसबीटी प्लगइन का उपयोग कर कैशिंग है: https://github.com/tlazaro/texture-packer-plugin/blob/71923eab9e4f626a0bdd1dbe8138733a42f474af/src/main/scala/com/starkengine/TexturePackerPlugin.scala#L28 –