2013-06-11 10 views
14

के बाद टास्क लागू मैं स्वचालित रूप से एक कार्य को निष्पादित करने में सक्षम हूँ के साथ संकलन से पहले:एसबीटी संकलित

compile in Compile <<= (compile in Compile).dependsOn(myTask) 

मैं एक ही लेकिन के बाद संकलन करना कैसे करते हैं?

मैं जानता हूँ कि मैं कर सकते हैं:

compile in Compile <<= (compile in Compile) map{x=> 
    // post-compile work 
    doFoo() 
    x 
} 

मनमाना स्काला कोड निष्पादित करने के लिए, लेकिन मैं स्वचालित रूप से लक्षित कार्य ही निष्पादित करने के लिए जब एक संकलन घटना होती है

की तरह कुछ कर की जरूरत है:

val foo = TaskKey[Unit]("foo", "...") 
val fooTask = foo <<= scalaInstance map {si => 
... 
} dependsOn(compile in Compile) 

काम करता है अगर मैं sbt> प्रॉम्प्ट से "foo" टाइप करता हूं; यानी संकलन के बाद कार्य निष्पादित किया जाता है, लेकिन लक्ष्य संकलन कार्य में स्वयं को हुक करना है, इसलिए जब भी कोई संकलन होता है, तो फ़्यू कार्य स्वचालित रूप से संकलन पूर्ण होने के बाद बुलाया जाता है।

क्या यह संभव है, या क्या मैं अंतर्निहित संकलन कार्य में शामिल होने के गलत तरीके से चीजों के बारे में जा रहा हूं?

+0

क्या आप उपयोग के मामले की व्याख्या कर सकते हैं? –

+0

@ मार्क हाराह, प्ले की एक सीमा है जहां उप परियोजनाओं के लिए जावास्क्रिप्ट रिवर्स रूटिंग केवल रनटाइम पर उत्पन्न की जा सकती है। मुझे संकलन समय पर स्थिर फ़ाइल के रूप में जेनरेट किए गए मार्गों की आवश्यकता है, जो मैंने पूरा किया है, कार्य में संकलन ऑपरेशन के रूप में कार्य में हुकिंग के अपवाद के साथ (यानी मुझे पहले आवेदन को संकलित करने की आवश्यकता है, अन्यथा नए मार्गों के लिए जिम्मेदार नहीं होगा मार्ग निर्माण कार्य में)। – virtualeyes

+0

क्या ये फ़ाइलें जेनरेट की जा रही हैं संसाधनों के रूप में? –

उत्तर

13

सामान्यतः, कुछ कार्य है जो आपके कार्य पर निर्भर करता है।

तो compile मतलब है "संकलन और चीजों की स्थापना की ग्रंट के लिए" करने के लिए इस्तेमाल किया जा रहा है, तो एक prepareGrunt कार्य है कि compile और myTask और चलाने के बजाय पर निर्भर करता है बनाएँ।

यदि myTask प्रोजेक्ट के वर्गों और संसाधनों के पहले किसी अन्य चीज़ द्वारा उपयोग किया जाना चाहिए, तो इसे exportedProducts पर निर्भरता बनाएं। run और test जैसे कार्य और आश्रित परियोजनाओं में कार्य उस कार्य से निर्यातित क्लासपाथ प्रविष्टियां प्राप्त करेंगे।

"संकलन के कुछ समय बाद चलाने" में खतरे यह है कि myTask वास्तव में उस कार्य से पहले नहीं चलाया जाएगा जो वास्तव में इसकी आवश्यकता है। विधि Initialize[Task[T]] पर विधि है, लेकिन इसे आसानी से दुरुपयोग किया जाता है और केवल तभी उपयोग किया जाना चाहिए जब कार्य के आउटपुट को केवल सभी कार्यों को निष्पादित करने के बाद उपयोग किया जाता है।

+3

+1 धन्यवाद मार्क, आप एसबीटी के साथ अविश्वसनीय काम कर रहे हैं, इसे जारी रखें (हालांकि सोना न भूलें ;-)) – virtualeyes