2014-10-23 5 views
9

मैं Play 2.3 एप्लिकेशन के संकलन से पहले एक कस्टम कार्य चलाने की कोशिश कर रहा हूं। मैं अपने build.sbt फ़ाइल में इस है:प्ले पेज तक पहुंचने पर दो बार संकलन कार्य निष्पादित करने वाले एक्टिवेटर से कैसे बचें?

lazy val helloTask = TaskKey[Unit]("hello", "hello") 

helloTask := { 
    println("hello test") 
} 

(compile in Compile) <<= (compile in Compile) dependsOn helloTask 

जब मैं activator ~run चलाने के लिए और उसके बाद ब्राउज़र में एक पृष्ठ को खोलने, मैं निम्नलिखित उत्पादन प्राप्त करें:

C:\Development\test>activator ~run 
[info] Loading project definition from C:\Development\test\project 
[info] Set current project to play (in build file:/C:/Development/test/) 

--- (Running the application from SBT, auto-reloading is enabled) --- 

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 

(Server started, use Ctrl+D to stop and go back to the console...) 

hello test 
[success] Compiled in 418ms 
hello test 
hello test 
[info] play - Application started (Dev) 

यह अपने कस्टम कार्य तीन बार चल रहा है लगता है । क्या कोई तरीका है जिससे मैं इससे बच सकता हूं?

+0

दिलचस्प। ऐसा प्रतीत होता है कि एक पृष्ठ लोड करना दो बार 'संकलन' ट्रिगर करता है। [मैं एक मुद्दे की रिपोर्ट करता हूं] (https://github.com/playframework/playframework/issues)। –

+0

बीटीडब्ल्यू, एक नया कार्य परिभाषित करने के लिए छोटे संस्करण 'taskKey' का उपयोग करें -' आलसी वैल हैलो = टास्ककी [यूनिट] ("मेरा कस्टम हैलो कार्य") '। –

+0

आखिरकार .... द। नई रिलीज इस – jsuereth

उत्तर

3

मुझे एक ही समस्या थी और मुझे समाधान मिला।

  • संकलित जो मुख्य निर्माण (src/मुख्य/स्केला) को परिभाषित करता है:

    Sbt में आप तीन Scopes by configuration axis है।

  • परीक्षण जो परिभाषित करता है कि परीक्षण कैसे बनाएं (src/test/scala)।
  • रनटाइम जो रन कार्य के लिए क्लासपाथ को परिभाषित करता है।

आप रनटाइम बजाय संकलित उपयोग करना चाहिए। यह इस तरह दिखना चाहिए:

lazy val helloTask = taskKey[Unit]("hello") 

helloTask := println("hello test") 

(compile in Runtime) <<= (compile in Runtime) dependsOn helloTask 
संबंधित मुद्दे