2011-05-15 10 views
15

लिफ्ट वेब फ्रेमवर्क में, सरल बिल्ड टूल (एसबीटी) के लिए निर्भरता LiftProject.scala में निर्दिष्ट हैं। उस फ़ाइल में यह कोड शामिल है:एसबीटी निर्भरताओं को स्थापित करते समय% और %% ऑपरेटर क्या करते हैं?

override def libraryDependencies = Set(
    "net.liftweb"    %% "lift-webkit" % liftVersion % "compile->default", 
    "net.liftweb"    %% "lift-mapper" % liftVersion % "compile->default", 
    "org.mortbay.jetty"  % "jetty"   % "6.1.22" % "test->default", 
    "junit"     % "junit"   % "4.5"  % "test->default", 
    "org.scala-tools.testing" %% "specs"   % "1.6.6"  % "test->default", 
    "org.scala-lang"   % "scala-compiler" % "2.8.1"  % "test->default", 
    "org.apache.tomcat"  % "tomcat-juli" % "7.0.0"  % "test->default", 
    "com.h2database"   % "h2"    % "1.2.138" 
) ++ super.libraryDependencies 

% और %% ऑपरेटर यहां क्या करते हैं? यदि मैं इस कोड को स्केल दुभाषिया में पेस्ट करता हूं, तो यह त्रुटियों से बाहर निकलता है, और स्ट्रिंग या रिचस्टिंग के लिए न तो% और न ही %% परिभाषित किया जाता है। यहाँ क्या चल रहा है?

+2

मैंने इसे और अधिक टेबल-जैसी बनाने के लिए स्वरूपण का थोड़ा सा उपयोग किया। मुझे आशा है कि आपको बुरा लगेगा, लेकिन, यदि आप करते हैं, तो मेरे संपादन को वापस करने के लिए स्वतंत्र महसूस करें। –

उत्तर

8

वे स्कैला के एक विशिष्ट संस्करण के लिए हथियाने के निर्माण को नियंत्रित करते हैं।

% निर्भरता को ठीक उसी तरह पकड़ लेता है जैसा आपने वर्णन किया था।

%% स्थानीय स्कैला निर्माण के लिए संस्करण लाने के लिए संसाधन नाम में स्कैला संस्करण को tacks। अतिरिक्त उपयोगी। अगर आप स्कैला के कई रिलीज के लिए क्रॉसबिल्ड करते हैं।

14

इन कार्यों के बीच अंतर यह है कि %% एसबीटी निर्भरता को हल करते समय स्कैला संस्करण मानता है, उदाहरण के लिए net/liftweb/lift-webkit_2.8.1/2.3/lift-webkit_2.8.1-2.3.jar रेपो से डाउनलोड किया जाएगा।

संकलन त्रुटि के संबंध में - इन तरीकों को तब कहा जाना चाहिए जब एसबीटी कक्षा पदानुक्रम में परिभाषित कुछ अंतर्निहित तरीकों से वास्तविक रूपांतरण होता है। "Library dependencies":

सादर, व्लादिमीर

+1

यह बहुत जादू है ... वे इससे कुछ और स्पष्ट करने की कोशिश कर सकते थे ... –

0

2011 के बाद से, दस्तावेज़ में थोड़ा और अधिक पूरा हो गया।

लेख Divan Visagie से "Sbt heiroglyphs and multi-projects explained" उन लोगों को भी एसबीटी ऑपरेटरों विवरण:

% और %% एक छोटे से मुश्किल हो: वे आईडी और अनुक्रम में प्रत्येक पुस्तकालय के संस्करणों को परिभाषित है, लेकिन यह है कि कहने के लिए सुरक्षित है :

"org.scala-tools" % "scala-stm_2.11.1" % "0.3" 

के बराबर है
"org.scala-tools" %% "scala-stm" % "0.3" 

तो प्रभावी रूप से अतिरिक्त %% यह पता लगा लेता है क्या स्काला संस्करण आप पर हैं मतलब है।

दस्तावेज़ कहते हैं:

विचार यह है कि कई निर्भरता कई स्काला संस्करणों के लिए संकलित किया गया है, और आप एक है कि अपनी परियोजना से मेल खाता है दोहरी संगतता सुनिश्चित करने के लिए प्राप्त करना चाहते हैं।

अभ्यास में जटिलता यह है कि प्रायः एक निर्भरता थोड़ा अलग स्कैला संस्करण के साथ काम करेगी; लेकिन %% इसके बारे में स्मार्ट नहीं है।
तो यदि निर्भरता 2.10.1 के लिए उपलब्ध है लेकिन आप scalaVersion := "2.10.4" का उपयोग कर रहे हैं, तो आप 2.12.1 निर्भरता संभावित कामों के बावजूद %% का उपयोग करने में सक्षम नहीं होंगे।
यदि %% काम करना बंद कर देता है, तो बस देखें कि किस संस्करण पर निर्भरता वास्तव में बनाई गई है, और जिस व्यक्ति को आप सोचते हैं उसे हार्डकोड करें (माना जाता है कि एक है)।

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