2012-05-01 11 views
6

में निर्भरता जोड़ने पर संस्करण संख्या के साथ संपत्ति का पुन: उपयोग करें मेरे पास एक परियोजना है जो एसबीटी 0.11 के साथ बनाई गई है। मैं स्काला स्विंग के साथ एक सरल यूआई बनाने के लिए कोशिश कर रहा हूँ, इसलिए पहली बात मेरे build.sbt में स्केला-झूले पर निर्भरता को जोड़ने के लिए है:एसबीटी

libraryDependencies += "org.scala-lang" % "scala-swing" % "2.9.1-1" 

लेकिन मैं एक SettingKey scalaVersion परिभाषित किया गया है:

scalaVersion := "2.9.1-1" 

मैं उस संपत्ति का संदर्भ कैसे दे सकता हूं? अगर मैं की तरह

libraryDependencies += "org.scala-lang" % "scala-swing" % scalaVersion 

इसका इस्तेमाल करने की कोशिश संकलक शिकायत है कि यह sbt.SettingKey [स्ट्रिंग] में पाया गया, जबकि स्ट्रिंग की उम्मीद है। SettingKey पर get(...) और evaluate(...) विधियां हैं, लेकिन उन्हें पास करने के लिए कुछ सेटिंग [स्कोप] पैरामीटर की आवश्यकता है।

इस संपत्ति का संदर्भ देने का सबसे आसान तरीका क्या है? , ताकि आप इसे कुछ भिन्न तरीकों से लिख सकता है, उदाहरण के लिए यह वास्तव में scalaVersion पर apply विधि लागू है; (

libraryDependencies <+= (scalaVersion) { sv => "org.scala-lang" % "scala-swing" % sv } 

कि मेरी पसंदीदा स्वरूपण है:

उत्तर

6

आप प्रणाली है कि libraryDependencies अब scalaVersion पर निर्भर करता है बताने की आवश्यकता ।

foo <<= (scalaVersion, organization) { (sv, o) => o + " uses Scala " + sv } 
0: scalaVersion("org.scala-lang" % "scala-swing" % _))

आप आप एक साथ पर निर्भर करना चाहता था एकाधिक सेटिंग था, तो आप उनमें से टपल पर लागू होता है

+0

धन्यवाद: बस स्ट्रिंग मान पाने के लिए scalaVersion चर को .value जोड़ें। मुझे हमेशा लगता है कि एसबीटी अतिसंवेदनशील है। –

0

कुछ

libraryDependencies <+= scalaVersion { v => "org.scala-lang" % "scala-swing" % v} 

की तरह काम करना चाहिए।

2
libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-swing" % _) 

< एसबीटी को बताता है कि आपकी सेटिंग में दूसरी सेटिंग पर निर्भरता है।

+ एसबीटी को बताता है कि आप एक और मूल्य जोड़ना चाहते हैं, मौजूदा लोगों को प्रतिस्थापित नहीं करना (यह भी इंगित करता है कि सेटिंग की सामग्री एक अनुक्रम है, और आप इसमें एक तत्व जोड़ रहे हैं)।

सिंटैक्स setting(function)function(setting) जैसा ही है, जहां function उचित संदर्भ पर पैरामीटर के रूप में मूल्यांकन की गई सेटिंग लेता है। मुझे यह भी नहीं पता कि उसे कैसे लिखना है, और यह बहुत verbose होगा, इसलिए शॉर्टकट बहुत उपयोगी है।

एकाधिक सेटिंग्स पर निर्भरता बनाने के लिए (setting 1, setting 2)((a, b) => ...) का भी उपयोग कर सकते हैं।

पीएस: निम्नलिखित भी काम कर सकता है, और यह थोड़ा छोटा है, लेकिन इसे 2.10.0 के रूप में विशेष कंपाइलर झंडे के बिना बहिष्कृत कर दिया गया है।

libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-swing" %) 
1

यह समझना पुराना है - किसी और के मामले में कोई जवाब मिलने पर एक उत्तर जोड़ना।विकल्प बताने के लिए

libraryDependencies += "org.scala-lang" % "scala-swing" % scalaVersion.value