2014-06-11 6 views
9

मैं एक शेल कमांड निष्पादित करना चाहता हूं - rm -r एक निर्देशिका - जब भी मेरा एसबीटी प्रोजेक्ट बनाता है। यह compile से पहले होगा।संकलन कार्य से पहले खोल कमांड को निष्पादित करने के लिए कैसे करें?

तर्क: एक कैश फ़ाइल है जो कभी अपडेट नहीं होती है। अगर मैं प्रत्येक संकलन से पहले इसे हटा देता हूं, तो यह अद्यतन को मजबूर करता है।

कृपया सलाह दें।

+0

हां। मैंने स्पष्टता के लिए इसे ऊपर उठाया, और कार्यक्षमता को सत्यापित करने के बाद इसे अभी भी उत्तर के रूप में चिह्नित किया। वास्तव में जो मैं खोज रहा था, धन्यवाद! –

उत्तर

13

आप एक काम है कि फाइल को हटा देता है बना सकते हैं:

Project(...).settings(
    removeCacheSettings, 
    compile in Compile <<= (compile in Compile).dependsOn(removeCacheTask) 
) 

स्रोत:: https://groups.google.com/forum/#!topic/play-framework/4DMWSTNM4kQ

अपनी परियोजना के लिए इन सेटिंग जोड़कर

val removeCacheTask = TaskKey[Unit]("removeCacheFile", "Deletes a cache file") 
val removeCacheSettings = removeCacheTask := { 
    import sys.process._ 
    Seq("rm", "/path/to/file") ! 
} 

तो उस कार्य संकलन से पहले चलाया जा आवश्यकता होती है


build.sbt में यह इस तरह दिखेगा:

lazy val removeCacheTask = TaskKey[Unit]("removeCacheFile", "Deletes a cache file") 

removeCacheTask := { 
    import sys.process._ 
    Seq("rm", "/path/to/file")! 
} 

compile in Compile <<= (compile in Compile).dependsOn(removeCacheTask) 
+1

यह एक lifesaver है! मुझे लगता है कि यह Play के दस्तावेज़ – acjay

+1

में होना चाहिए ध्यान दें कि यदि आप उपप्रोजेक्ट में कार्य का संदर्भ देना चाहते हैं, तो आपको एक दायरा देना होगा या कार्य उपप्रोजेक्ट में नहीं मिलेगा। लिखने का सबसे आसान तरीका है 'ग्लोबल में कैश टास्क हटाएं: = {...} ' –

6

@LimbSoup answer ठीक है, लेकिन कुछ सुधारों पर विचार करने के लिए कुछ सुधार हैं।

आदेश पर अमल करने rm अन्य गैर rm OSes, विंडोज की तरह पर उपलब्ध नहीं हो सकता है, इसलिए sbt.IO.delete विधि का उपयोग करने के लिए बहुत सुरक्षित है।

चूंकि यह फ़ाइलों को हटाने के बारे में है, clean कार्य है जो def doClean(clean: Seq[File], preserve: Seq[File]): Unit विधि (sbt.Defaults से) पर निर्भर करता है और उचित परिवर्तन के साथ यह कुछ मदद भी हो सकता है। मुझे लगता है कि इसे एक नई कॉन्फ़िगरेशन की आवश्यकता होगी, हालांकि।

कस्टम clean कार्य के संबंध में कुछ मार्गदर्शन के लिए How to exclude files in a custom clean task? देखें।

+0

मैंने उत्तर को ऊपर, ऊपर और पूरी तरह से काम किया है। अब मैं आपके विस्तार की तलाश में हूं, इसलिए मैं इसके लिए भी आपका धन्यवाद करता हूं! –

संबंधित मुद्दे

 संबंधित मुद्दे