2013-02-10 9 views
11

स्कैला 2.10.1 जल्द ही बाहर आ रहा है, मेरा मानना ​​है कि, मैं यह सुनिश्चित करना चाहता हूं कि अब मैं प्रकाशित कलाकृतियों को स्वचालित रूप से उस संस्करण के स्केल-लाइब्रेरी.जर के साथ काम करूँगा। मैं 0.12.2 एसबीटी का उपयोग प्रकाशित करने के लिए, औरएसबीटी प्रकाशित कलाकृतियों में scala-library.jar संस्करण

scalaVersion := "2.10.0" 

की सेटिंग के साथ मैं सही ढंग से मेरी विरूपण साक्ष्य, उदा को बाइनरी संगत संस्करण संलग्न

<artifactId>mylibrary_2.10</artifactId> 

... लेकिन स्केला पुस्तकालय निर्भरता अभी भी 2.10.0 का कहना है:

 <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>2.10.0</version> <!-- !!! --> 
    </dependency> 

मुझे लगता है कि सही नहीं है, और इसे यहाँ 2.10 या 2.10 का उपयोग करना चाहिए +।?


मैं भी scalaBinaryVersion := "2.10" जोड़ने की कोशिश की, लेकिन वह कुछ भी बदलने की नहीं लगती।

एक और विचार जो मैंने किया था scalaVersion := "2.10.+" का उपयोग करना था। एसबीटी Getting Scala 2.10.+ ... के साथ हमेशा के लिए लेता है, लेकिन अंततः यह ठीक हो जाता है और pom में अब यह संस्करण scala-library.jar के लिए है। तो शायद यह सही तरीका है?

+1

स्पष्ट रूप से यह 'क्रॉस-बिल्ड' के लिए अधिक आम है। अधिक जानकारी के लिए http://www.scala-sbt.org/release/docs/Detailed-Topics/Cross-build देखें। मैं आपको नहीं बता सकता कि आपको जो समाधान मिला वह सही तरीका है। – EECOLOR

+0

ठीक है, अब मैं एक बात कह सकता हूं कि '2.10। + गंभीर समस्याएं जोड़ता है।मैंने खुद को यादृच्छिक स्थानों में टाइपर त्रुटियों के साथ पाया, जब तक मुझे पता चला कि किसी भी तरह से कुछ प्रोजेक्ट पहले से ही स्कैला-कंपाइलर.जर '2.10.1-आरसी 1' तैयार कर चुका था, जो स्पष्ट रूप से बाइनरी संगत नहीं है। –

+0

खैर, स्कैला लाइब्रेरी का संस्करण स्कैला के संस्करण के बराबर है जो आप लक्ष्यीकरण कर रहे हैं, क्योंकि संस्करण 2.10.1 के लिए स्कैला-लाइब्रेरी स्कैला-लाइब्रेरी 2.10.0 से अलग है। सभी स्कैला 2.10 संस्करण बाइनरी संगत होने चाहिए। क्या आप 2.10.0 से 2.10.1 तक स्विच करते समय पोस्ट की गई त्रुटियों को पोस्ट कर सकते हैं? –

उत्तर

0

मुझे लगता है कि यदि आप 'वसा जार' उत्पन्न कर रहे हैं तो सबकुछ प्रत्यक्ष निर्भरताओं के संस्करणों द्वारा निर्धारित किया जाता है (अगर मैं गलत हूं तो मुझे सही करें) क्योंकि उनकी प्रत्यक्ष निर्भरताएं भी निर्दिष्ट होती हैं। निस्संदेह यह आपको कुछ घटकों से गारंटी नहीं देता है जो आप चाहते हैं कि स्काला लाइब्रेरी संस्करण पर निर्भर करते हैं, आपको उन घटकों से गारंटी नहीं दी जाती है जो कुछ lib के विभिन्न संस्करणों पर निर्भर करती हैं और निश्चित रूप से स्कैला सक्रिय विकास चरण में है लेकिन यदि आप चिपकते हैं कुछ स्कैला लाइब्रेरी संस्करण के साथ और अच्छी तरह से परीक्षण किया गया, जब तक कि यह परिवर्तन नहीं हो आप ठीक हैं।

लेकिन आप गारंटी नहीं दे सकते कि सब कुछ अगले स्कैला लाइब्रेरी पर अच्छा होगा क्योंकि आपके पास अन्य घटक भी हैं जो शायद उसी दिन सिंक्रनाइज़ नहीं होते हैं, है ना? और, हाँ, स्कैला लाइब्रेरी का संस्करण स्केल कंपाइलर के संस्करण से मेल खाना चाहिए।

1

आपको 2.10.x के लिए जाने के लिए अच्छा होना चाहिए, क्योंकि यह मामूली संस्करणों के बीच बाइनरी संगत होने के लिए है (जैसा कि release notes में प्रलेखित है)।

सामान्य रूप से, आप एसबीटी में crossScalaVersions सेटिंग का उपयोग करके स्कैला के मनमानी संस्करणों के लिए कलाकृतियों को उत्पन्न कर सकते हैं।

build.sbt

name := "so-14803362" 

scalaVersion := "2.10.0" 

crossScalaVersions := Seq("2.10.0", "2.10.1", "2.10.2") 

ऊपर विन्यास के साथ, आप पहले जोड़ें कर सकते हैं एसबीटी के लिए एक + उन्हें एक स्काला संस्करण के लिए चलाने के लिए आदेश:

> + publish 

यह निर्माण और प्रकाशित करेंगे अपने crossScalaVersions में सूचीबद्ध प्रत्येक स्कैला संस्करण के साथ प्रोजेक्ट की कलाकृतियों।

अधिक जानकारी के लिए sbt docs देखें।

+0

धन्यवाद। मैं क्रॉस संस्करणों के बारे में जानता हूं, हालांकि, और मैंने खुशी से 2.10 के साथ त्याग दिया। मुझे लगता है कि यह जरूरी नहीं है कि तीन या चार के कारक द्वारा दुनिया में कलाकृतियों की मात्रा में वृद्धि करना भयानक है। –

+0

अच्छा बिंदु। स्पष्ट रूप से 2.10 के साथ, क्रॉस संस्करण केवल 2.10.x आर्टिफैक्ट उत्पन्न करते हैं, लेकिन आप अभी भी विश्वास कर सकते हैं कि आप सूचीबद्ध संस्करणों के लिए कवर हैं। – earldouglas

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