2013-03-28 3 views
13

क्या एसबीटी और उसके प्लगइन द्वारा उपयोग किए जाने वाले स्कैला के संस्करण को बदलना आवश्यक है?मैं स्काला के संस्करण को कैसे बदल सकता हूं जिसका उपयोग Play, SBT और उसके प्लगइन द्वारा किया जाता है?

मैं प्ले फ्रेमवर्क 2.1.1-आरसी 2 का उपयोग कर रहा हूं। मैं नई परियोजना बनाना चाहता हूं जो स्कैला 2.10.1 का उपयोग करेगी। प्राप्त करने के लिए कि मैं निम्नलिखित किया

  • Build.scala

तब मैं play about आदेश भागा में Build.scala

  • scalaVersion 2.10.1 करने के लिए चर प्रारंभ में निर्भरता "org.scala-lang" % "scala-compiler" % "2.10.1" जोड़ा गया है और उत्पादन

    [test2] $ about 
    Getting Scala 2.10.1 ... 
    downloading http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#scala-compiler;2.10.1!scala-compiler.jar (7401ms) 
    downloading http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#scala-library;2.10.1!scala-library.jar (4309ms) 
    downloading http://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#scala-reflect;2.10.1!scala-reflect.jar (2144ms) 
    downloading http://repo1.maven.org/maven2/org/scala-lang/jline/2.10.1/jline-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#jline;2.10.1!jline.jar (201ms) 
    :: retrieving :: org.scala-sbt#boot-scala 
         confs: [default] 
         5 artifacts copied, 0 already retrieved (24386kB/58ms) 
    [info] This is sbt 0.12.2 
    [info] The current project is {file:/C:/work/test_projects/test2/}test2 
    [info] The current project is built against Scala 2.10.1 
    [info] Available Plugins: play.Project, sbt.PlayProject, com.typesafe.sbteclipse.plugin.EclipsePlugin, com.typesafe.sbtidea.SbtIdeaPlugin 
    [info] sbt, sbt plugins, and build definitions are using Scala 2.9.2 
    
    निम्नलिखित गया

    अंतिम पंक्ति मुझे चिंतित करती है। यह कहता है स्कैला 2.9.2 का उपयोग किया जाता है। मैं उसे कैसे बदल सकता हूं ? क्या यह मेरे कोड को संकलित करने के लिए किस संस्करण का उपयोग करेगा?

    अद्यतन: ऐसा लगता है कि कंपाइलर के संस्करण को बदलने का यह तरीका ठीक से काम नहीं करता है। मैं खेलने कंसोल में निम्नलिखित चेतावनी मिल गया है मैं अपने अनुप्रयोग चलाने के बाद:

    [warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
    [warn] org.scala-lang: 2.10.1, 2.10.0 
    [info] Compiling 5 Scala sources and 1 Java source to C:\work\test_projects\test2\target\scala-2.10\classes... 
    [info] 'compiler-interface' not yet compiled for Scala 2.10.1. Compiling... 
    [info] Compilation completed in 8.608 s 
    [warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
    [warn] org.scala-lang: 2.10.1, 2.10.0 
    [info] play - Application started (Dev) 
    [warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
    [warn] org.scala-lang: 2.10.1, 2.10.0 
    
  • उत्तर

    13

    एसबीटी एक स्काला आवेदन है, और सभी स्काला अनुप्रयोगों की तरह, यह स्काला के दोहरी संगतता नियमों का पालन करने की आवश्यकता है,। विशेष रूप से, संस्करण 2.8, 2.9 और 2.10 एक दूसरे के साथ संगत नहीं हैं।

    इसका मतलब है कि, क्योंकि प्ले द्वारा उपयोग किए गए एसबीटी संस्करण को स्कैला 2.9.2 के साथ संकलित किया गया था, तो सभी प्लगइन्स और सभी प्रोजेक्ट परिभाषा को 2.9.x संस्करण के साथ संकलित किया जाना चाहिए। ऐसा इसलिए है क्योंकि आपका Build.scala ऐसा कुछ नहीं है जिसे एसबीटी द्वारा निष्पादित किया जाता है, यह एसबीटी निष्पादन के भाग बन जाता है।

    हालांकि, इसका संबंध है कि आपके आवेदन को स्कैला के किस संस्करण के साथ संकलित किया जाना चाहिए। एसबीटी किसी भी स्काला संस्करण का उपयोग कर सकता है, और एक ही समय में कई स्कैला संस्करण भी उत्पन्न कर सकता है - इस प्रकार स्कैला पुस्तकालय कई स्कैला संस्करणों के लिए बाइनरी प्रदान करने में कामयाब होते हैं।

    +0

    धन्यवाद। वह मेरे प्रश्न का उत्तर देता है। मैं अपना उत्तर भी समझाऊंगा कि यह समझाने के लिए कि मैंने लक्ष्य संस्करण कैसे बदला है। – expert

    11

    मेरे प्रयोगों का अंतिम लक्ष्य मेरी परियोजना बनाने के लिए उपयोग किए गए स्कैला कंपाइलर के संस्करण को बदलना था।

    कई प्रयासों के बाद मैंने निष्कर्ष निकाला कि यह संभवतः संभव नहीं है। मुझे लगता है कि यह प्ले फ्रेमवर्क के कुछ रचनाकारों को संबोधित करना चाहिए।

    Build.scala में scalaVersion2.10.1-local को सेट करने में बहुत मदद नहीं मिली। एसबीटी मेवेन/आइवी जा रहा है और 2.10.0 के टुकड़े डाउनलोड कर रहा है जो मैं नहीं चाहता। ऐप को संकलित करने के बाद मुझे असंगत निर्भरताओं के बारे में चेतावनियों का गुच्छा मिलता है।

    मुझे लगता है कि ऐसा होता है क्योंकि {PLAY_HOME}\framework\project\Build.scala में परिवर्तनीय सेट का गुच्छा 2.10.0 है।

    "सुरुचिपूर्ण" समाधान एसबीटी को बताना था कि मैं बिल्ड में निम्नलिखित चर सेट करके स्कैला की स्थानीय प्रति का उपयोग करने जा रहा हूं।स्केला

    scalaVersion := "2.10.1-local", 
    autoScalaLibrary := false, 
    scalaHome := Some(file("/Program Files (x86)/scala/")) 
    

    लेकिन फिर भी अगर मैं play idea आदेश जिसके परिणामस्वरूप परियोजना के साथ IntelliJ विचार विन्यास बनाने की जरूरत है कुछ को साफ, विशेष रूप से:

    • स्काला पहलू Scala 2.10.0 पुस्तकालय लापता संदर्भ।
    • मॉड्यूल test3-निर्माण Scala 2.9.2 पुस्तकालय

    मैं अपने प्रयोग अन्य लोगों को जो भी प्ले और स्काला सीख रहे हैं आशा है कि लापता पर निर्भरता है।

    विवरण यहां हैं: http://www.scala-sbt.org/release/docs/Howto/scala.html

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

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