2011-11-27 8 views
61

मैं सरल-निर्माण-उपकरण का उपयोग करके कुछ जावा-केवल परियोजनाएं बना रहा हूं। जब मैं परियोजनाओं से कलाकृतियों को प्रकाशित करता हूं, कहता हूं, एसबीटी प्रकाशित-स्थानीय तो परिणामस्वरूप कलाकृतियों में उनके नाम पर स्कैला संस्करण शामिल है। एक स्काला परियोजना के साथ यह समझ में आता है, लेकिन चूंकि ये जावा केवल प्रोजेक्ट हैं जो यह नहीं करता है। मैं स्कैला संस्करण के इस पोस्टफिक्सिंग को कैसे अक्षम करूं? या मैं कर सकता हूँसरल-निर्माण-उपकरण के साथ प्रकाशित + कलाकृतियों से निर्मित _ <scala-version> पोस्टफिक्स को आप कैसे हटाते हैं?

संदर्भ के लिए मैं एसबीटी 0.11.1, स्कैला 2.9.1 और बिल्ड कॉन्फ़िगरेशन के लिए एक .sbt फ़ाइल का उपयोग कर रहा हूं (हालांकि एक पूर्ण प्रोजेक्ट कॉन्फ़िगरेशन में जाने से कोई समस्या नहीं होगी)।

उत्तर

80

चारों ओर देख कैसे Artifact.artifactName कार्यान्वित किया जाता है के बाद और अंत में इस्तेमाल किया ऐसा लगता है कि इसे बंद करने का तरीका क्रॉसपाथ सेटिंग के लिए झूठा निर्दिष्ट करना है। यह xsbt विकी पर त्वरित कॉन्फ़िगरेशन उदाहरणों में से एक में प्रलेखित है।

http://www.scala-sbt.org/release/docs/Examples/Quick-Configuration-Examples

// disable using the Scala version in output paths and artifacts 
crossPaths := false 
8

यह Modifying default artifacts के तहत xsbt विकी पर प्रलेखित है। उस पृष्ठ से:

उदाहरण के लिए, एक वर्गीकारक या पार पथ के बिना एक न्यूनतम नाम का उत्पादन करने के:

artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => 
    artifact.name + "-" + module.revision + "." + artifact.extension 
} 
+0

धन्यवाद पॉल। दुर्भाग्य से प्रकाशित आर्टिफैक्ट नाम पर इसका कोई प्रभावशाली प्रभाव नहीं है। प्रकाशित आर्टिफैक्ट में अभी भी नाम के अंत में स्कैला संस्करण है। मैंने परिणामी स्ट्रिंग में जंक जोड़ा और यह भी दिखाई नहीं दिया। यहां मेरा build.scala है: http://pastie.org/2931253 – James

+1

इसके अलावा, आपके द्वारा संदर्भित पृष्ठ का कहना है कि artifactName सेटिंग प्रकाशित नाम को प्रभावित नहीं करेगी। "फ़ंक्शन को प्रकाशित नाम को प्रभावित किए बिना कलाकृतियों के लिए विभिन्न स्थानीय नामों का उत्पादन करने के लिए संशोधित किया जा सकता है, जो कि रिपोजिटरी पैटर्न के साथ आर्टिफैक्ट परिभाषा द्वारा निर्धारित किया जाता है।" मैंने आर्टिफैक्ट सेटिंग को संशोधित करने और एक नया आर्टिफैक्ट प्रदान करने का प्रयास किया लेकिन यह मुझे सीधे स्कैला संस्करण पोस्टफिक्स से छुटकारा नहीं देता है।ऐसा लगता है कि एसबीटी आर्टिफैक्ट के आर्टिफैक्टनाम विधि के लिए स्कालावर्सन पास करने जा रहा है। उस विधि को ओवरराइड करना मेरा एकमात्र विकल्प है? – James

+0

आह डॉन - क्षमा करें, ऐसा कुछ नहीं है जिसे मैंने पहले किया है और वह पृष्ठ ऐसा लगता है कि आपको पहली नज़र में बिल्कुल वही चाहिए था। ऐसा लगता है कि आपको वैसे भी मिल गया है - वक्र गेंद के लिए खेद है। –

2

जबकि स्वीकार किए जाते हैं जवाब सख्ती से सही है, तो आप कभी नहीं crossVersionsfalse को सार्वजनिक रूप से प्रकाशित स्काला कलाकृतियों पर स्थापित करना चाहिए। एम्बेडेड स्कैला संस्करण एक महत्वपूर्ण संगतता सुविधा है, क्योंकि स्कैला पुस्तकालयों के विभिन्न संस्करण बाइनरी संगत नहीं हो सकते हैं।

केवल crossVersionsfalse पर परियोजनाओं के लिए सेट करें, जैसे सवाल में, जो केवल सख्ती से जावा हैं।

+0

क्या दो कलाकृतियों को प्रकाशित करना संभव है? एक स्कैला संस्करण और बिना किसी के साथ? –

+0

मुझे लगता है कि आप कर सकते हैं, लेकिन मुझे यकीन नहीं है कि मैं समझता हूं कि आप क्यों करेंगे? यदि आप वास्तव में एकाधिक कंपाइलर संस्करणों के लिए अपने स्कैला को संकलित करते हैं तो आप क्या करेंगे? – gregsymons

5

मुझे पता है कि यह सवाल पुराना है, लेकिन मैं खुद से एक ही सवाल पूछ रहा हूं, और वास्तव में ऐसा करने का एक बहुत ही आसान तरीका है।

%: तार आप आपूर्ति से एक आइवी मॉड्यूल आईडी के निर्माण के लिए इस्तेमाल की जाने वाली विधि आपको बस इतना करना है निर्भरता % बजाय %% का उपयोग कर घोषित करने के लिए है।

%%: जब ग्रुप के बाद इस्तेमाल किया, यह स्वतः ही (जैसे _2.10 रूप में) अपने परियोजना की स्काला संस्करण विरूपण साक्ष्य नाम के अंत में कहते हैं।

http://alvinalexander.com/scala/sbt-how-to-manage-project-dependencies-in-scala

+1

यह समाधान स्वीकार किए गए एक से बेहतर है, क्योंकि आपको केवल उस निर्भरता को बदलना है जहां स्कैला संस्करण संख्या एक समस्या है। 'Crosspaths' को गलत पर सेट करके आपको सभी निर्भरताओं को बदलना होगा और मैन्युअल रूप से स्कैला संस्करण जोड़ना होगा। – Victor

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