मैं संकलन से पहले स्वचालित रूप से एक कार्य निष्पादित करने में सक्षम हूं:
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" टाइप करता हूं तो काम करता है; अर्थात। कार्य संकलन के बाद निष्पादित किया जाता है, लेकिन लक्ष्य संकलन कार्य में स्वयं को हुक करना है, इसलिए किसी भी संकलन के दौरान, फ़ू कार्य स्वचालित रूप से संकलन पूर्ण होने के बाद बुलाया जाता है।
क्या यह संभव है, या क्या मैं अंतर्निहित संकलन कार्य में शामिल होने के गलत तरीके से चीजों के बारे में जा रहा हूं?
उत्तर:
उत्तर № 1 के लिए 13आम तौर पर, कुछ कार्य होता है जो आपके कार्य पर निर्भर करता है।
अगर compile
इसका उपयोग "अनुकरण और चींटियों के लिए चीजों को सेट करने" के लिए किया जा रहा है, फिर एक बनाएं prepareGrunt
कार्य जो निर्भर करता है compile
तथा myTask
और इसके बजाय भागो।
अगर myTask
परियोजना के वर्गों और संसाधनों से पहले किसी अन्य चीज का उपयोग किया जाना चाहिए, फिर इसे निर्भरता बना लें exportedProducts
। जैसे कार्य run
तथा test
और निर्भर परियोजनाओं में कार्य उस कार्य से निर्यातित क्लासपाथ प्रविष्टियां प्राप्त करेंगे।
संकलन के कुछ समय बाद "खतरे" में खतरा है myTask
उस कार्य से पहले भाग नहीं लिया जाएगा जिसकी वास्तव में आवश्यकता है। वहां है triggeredBy
विधि पर Initialize[Task[T]]
, लेकिन यह आसानी से दुर्व्यवहार किया जाता है और केवल तभी उपयोग किया जाना चाहिए जब कार्य के आउटपुट को केवल सभी कार्यों को निष्पादित करने के बाद उपयोग किया जाता है।