2009-12-30 13 views
7

के साथ स्केल 2.8.x कोड संकलित करें मैं बिल्डर को अपने स्कैला 2.8 प्रोजेक्ट को संकलित करने के लिए संघर्ष कर रहा हूं और मुझे उम्मीद थी कि किसी ने इसे पहले ही समझ लिया होगा।अपाचे बिल्डर

वर्तमान में मैं की तरह एक buildfile के साथ मानक HelloWorld अनुप्रयोग है निम्नलिखित:

ENV['JAVA_HOME'] = 'C:\Program Files (x86)\Java\jdk1.6.0_17' 
ENV['SCALA_HOME'] = 'C:\scala-2.8.0.Beta1-RC6' 

define "HelloWorld" do 

    #artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0' 
    require 'buildr/scala' 

    puts Scala.version 

end 

जब मैं Buildr मैं निम्नलिखित आउटपुट प्राप्त चलाएँ:

(C:/उपयोगकर्ताओं/ट्रैविस/eclipse_ws/HelloWorld, विकास)
2.7.5
बिल्डिंग HelloWorld
संकलन HelloWorld सी में:/उपयोगकर्ताओं/ट्रैविस/eclipse_ws/HelloWorld/लक्ष्य/कक्षाएं
बिल्डर निरस्त!
← [31mScala संकलक दुर्घटनाग्रस्त:
# ← [0m

पहली समस्या NoClassDefFoundError है - यह स्केला संकलक के मुख्य वर्ग नहीं मिल रहा। दूसरी समस्या यह है कि Scala.version 2.7.5 प्रिंट कर रहा है। यह गलत है क्योंकि SCALA_HOME पथ 2.8 रिलीज़ पर इंगित कर रहा है।

अंत में, --trace ध्वज का उपयोग करके मुझे पता चलता है कि बिल्डर कुछ हद तक सही स्केलैक कमांड उत्पन्न कर रहा है और जब मैं उस आदेश को मैन्युअल रूप से संकलित करता हूं तो सब कुछ संकलित करता है। मैं कहता हूं कि यह कुछ हद तक सही है क्योंकि कुछ सीपी प्रविष्टियां डुप्लीकेट हैं।

scalac -classpath C: /scala-2.8.0.Beta1-RC6/lib/scala-library.jar; सी: निम्नलिखित देखें /scala-2.8.0.Beta1-RC6/lib/scala -compiler.jar; सी: /scala-2.8.0.Beta1-RC6/lib/scala-library.jar; सी: /scala-2.8.0.Beta1-RC6/lib/scala-compiler.jar -sourcepath सी:/उपयोगकर्ता/ट्रैविस/eclipse_ws/हैलोवर्ल्ड/src/main/scala -d सी:/उपयोगकर्ता/ट्रैविस/eclipse_ws/हैलोवर्ल्ड/लक्ष्य/कक्षा -verbose -g सी:/उपयोगकर्ता/ट्रैविस/eclipse_ws/हैलोवर्ल्ड/src/main/scala /hw/HelloWorld.scala

एक और बात मैंने कोशिश की है (लेकिन बिल्डर बाहर errored) निम्नलिखित की स्थापना की गई थी (जो मैंने सोचा था कि डब्ल्यू/SCALA_HOME की उपस्थिति की आवश्यकता नहीं थी):

#artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0' 

तो कोई विचार?

यहाँ मेरी प्रणाली की जानकारी की एक त्वरित सूची है: 7 विन 64 बिट JDK 6 32 बिट Buildr के लिए स्थानीय स्तर पर निर्धारित करते हैं लेकिन JDK 6 64 बिट सिस्टम-वाइड रूबी 1.8.6 32 बिट Buildr 1.3.5 32 बिट स्कैला 2.8.0. बीटा 1-आरसी 6

एक और चीज जो मैं करने की सोच रहा हूं वह मेरे 32 बिट जेडीके को पुनर्स्थापित कर रहा है और इसे नाम में (x86) के साथ निर्देशिका प्राप्त कर रहा है। मुझे लगता है कि स्कैला बैट फाइलों के साथ शिकंजा हालांकि मुझे यकीन नहीं है कि यह मेरी वर्तमान समस्याओं के लिए प्रासंगिक है या नहीं।

अग्रिम धन्यवाद!

+0

मुझे स्कैला बाइनरी (स्क्रिप्ट्स, वास्तव में) सेट करने के लिए पथ नहीं दिख रहा है। –

+0

यह एक सिस्टम वैरिएबल के रूप में वैश्विक स्तर पर सेट है जो स्क्रिप्ट के अंदर उपलब्ध होना चाहिए ... जब मैं अपने घर कंप्यूटर पर वापस आऊंगा तो मैं स्थानीय रूप से स्क्रिप्ट में इसे सेट करने का परीक्षण करूंगा। शीघ्र जवाब देने के लिए ध्न्यवाद! –

+0

यहां तक ​​कि जब मैं अपनी बिल्डफाइल में निम्न पंक्ति डालता हूं तब भी समस्या मौजूद होती है। ENV ['पथ'] = ENV ['SCALA_HOME'] + '\ bin;' + एनएनवी ['जावा' एचओएमई '] +' \ bin; ' + एनएनवी ['पथ'] –

उत्तर

3

यह पता लगाया। मूर्ख समस्या बिल्डर में (या शायद अधिक सामान्य रूप से रूबी में?), आवश्यक विधि कॉल फ़ाइल के शीर्ष पर आना चाहिए (या कम से कम परिभाषित ब्लॉक के अंदर नहीं)।

की आवश्यकता होती है 'Buildr/स्केला'

तो दोनों NoClassDefFoundError और पुट Scala.version द्वारा प्रदर्शित गलत संस्करण इस माध्यम से ठीक कर रहे थे। पीछा कर रहा है क्या मेरी स्क्रिप्ट की तरह देखा जाना चाहिए था:

require 'buildr/scala' 

ENV['JAVA_HOME'] = 'C:\Program Files (x86)\Java\jdk1.6.0_17' 
ENV['SCALA_HOME'] = 'C:\scala-2.8.0.Beta1-RC6' 

define 'HelloWorld' do 

    puts Scala.version 

end 

Btw: Buildr (, तेजी से, संक्षिप्त config से अधिक सम्मेलन, आदि) बहुत मीठा होने के लिए एक बार आप समझ क्या आप :-) कर रहे हैं

लगता है
+0

मुझे खुशी है कि आपने इसे समझ लिया। पोस्ट करने के लिए धन्यवाद। मुझे यह ओएस एक्स पर जेआरबी और बिल्डर 1.4.0 (आरसी) के साथ एक परीक्षण परियोजना के लिए काम करने के लिए मिला। । –

1

बिल्डर 1.4 में स्कैला 2.8 और 1.4.2 के लिए समर्थन डिफ़ॉल्ट रूप से 2.8 का उपयोग करेगा।

2

संस्करण 1.4 के साथ, इस समय आप कर सकते हैं

Buildr.settings.build['scala.version'] = "2.8.0" 
require 'buildr/scala' 

और यह स्केला 2.8 का प्रयोग करेंगे।