2012-01-01 12 views
6

मैं एक स्काला स्क्रिप्ट पर काम कर रहा हूं जो जोडा टाइम का उपयोग करता है। आज तक, यह ठीक काम कर रहा था। किसी भी तरह, कुछ बदल गया है और यह अब काम नहीं कर रहा है।मैं स्कैला आरईपीएल से जावा lib का उपयोग क्यों कर सकता हूं लेकिन स्क्रिप्ट से नहीं?

यह काम करता है:

$ scala -cp "lib/*" 
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import org.joda.time._ 
import org.joda.time._ 

scala> Period.minutes(5) 
res0: org.joda.time.Period = PT5M 

लेकिन यह नहीं करता है:

$ scala -cp "lib/*" test.scala 
/Users/avi/Dev/experiments/rollups/scala/test.scala:4: error: object joda is not a member of package org 
import org.joda.time._ 
     ^
one error found 

test.scala केवल शामिल हैं:

#!/usr/bin/env scala -cp lib/* -deprecation 
!# 

import org.joda.time._ 

Period.minutes(5) 

यह भी काम नहीं करता:

$ scala -cp "lib/*" -e "import org.joda.time._" 
/var/folders/c4/gh5y9_cx5bz8x_4wm060l_mm0000gn/T/scalacmd1248995773392653303.scala:1: error: object joda is not a member of package org 
import org.joda.time._ 
     ^
one error found 

यह भी cp आर्ग में * का उपयोग कर की वजह से नहीं है:

$ scala -cp lib/joda-time-2.0.jar:lib/joda-convert-1.2.jar -e "import org.joda.time._" 
/var/folders/c4/gh5y9_cx5bz8x_4wm060l_mm0000gn/T/scalacmd5438658792813459030.scala:1: error: object joda is not a member of package org 
import org.joda.time._ 
     ^
one error found 

... यह सिर्फ इतना पागल है, क्योंकि इस पिछली बार मैं इस प्रोजेक्ट पर काम काम कर रहा था, बस एक या दो दिन पहले! और अब यह काम नहीं कर रहा है, और मुझे लगता है कि मैंने कुछ बदलना होगा, लेकिन ईमानदारी से मैं नहीं सोच सकता कि यह क्या हो सकता है।

सहायता!

उत्तर

12

टीएल; डीआर: fsc, "तेज़ संकलन डिमन", इसके कैश के साथ समस्या थी; fsc -shutdown समस्या का समाधान किया।

Seth Tisuethe Scala IRC channel on FreeNode में मुझे मेरी समस्या को हल करने में मदद करने में सक्षम था - यह fsc "फास्ट ऑफ़लाइन संकलक डेमॉन" के साथ साथ कुछ करना था। जब scala कमांड का उपयोग स्क्रिप्ट चलाने के लिए किया जाता है, तो यह fsc का उपयोग करता है, और ऐसा लगता है कि किसी भी तरह से डिमन द्वारा उपयोग/कैश किए गए क्लासपाथ को गड़बड़ कर दिया गया है।

यह पता चला है कि इस के आसपास काम करने के लिए कुछ तरीके हैं:

  • -nocompdaemonscala करने के लिए बस सभी
    • काम करता है पर FSC का उपयोग नहीं आर्ग गुजरती हैं, और failproof होना चाहिए, लेकिन धीमी गति से
  • रन fsc -shutdown
    • डेमॉन स्वचालित रूप से पुन: प्रारंभ हो जाएगा अगली बार जब आप डेमॉन के कैश रीसेट करने के लिए scala
  • रन fsc -reset का उपयोग
    • शायद इसे बंद करने की तुलना में तेजी लेकिन कम से कम failproof विकल्प होगा

मैं अभी भी पता नहीं है वास्तव में इस समस्या को पहली जगह में क्या हुआ, लेकिन सेठ से मिली इंप्रेशन और fsc पृष्ठ से यह है कि इस तरह की चीजें कभी-कभी होती हैं।

धन्यवाद, सेठ!

+1

इसे संभालने के लिए _best_ तरीका क्लासपाथ निर्देशों में सापेक्ष पथ का उपयोग नहीं करना है। –

+1

धन्यवाद @ डैनियलसी। सोब्राल, जो समझ में आता है, लेकिन यह स्क्रिप्ट के लिए अव्यवहारिक लगता है। मेरी स्क्रिप्ट में यह शीर्ष पर है: '#!/Usr/bin/env scala -cp lib/* -deprecation ! #' और मैं स्क्रिप्ट को किसी भी स्थान से बाश में शामिल करने में सक्षम होना चाहता हूं। तो शायद ऐसा करने का एक बेहतर तरीका है लेकिन यह मेरे लिए स्पष्ट नहीं है, क्योंकि मैं एक बैश विशेषज्ञ नहीं हूं और न ही स्कैला विशेषज्ञ हूं। –

+0

वैकल्पिक आमंत्रण मोड का उपयोग करें - कॉल sh, और फिर, sh से, कॉल स्कैला, जिस बिंदु पर आप वर्तमान निर्देशिका प्राप्त करने के लिए pwd का उपयोग कर सकते हैं। –

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

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