2012-01-01 12 views
6

Joda Time kullanan bir Scala komut dosyası üzerinde çalışıyorum. Bugüne kadar, bu iyi çalışıyordu. Her nasılsa, bir şey değişti ve artık çalışmıyor.Neden bir Scala REPL dosyasından bir Java lib kullanabilirim, fakat bir betikten değil?

$ 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 

ama bu değil:

Bu işleri

$ 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 sadece içerir:

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

import org.joda.time._ 

Period.minutes(5) 

bu da çalışmaz:

$ 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 

Ayrıca cp arg * kullanılması da neden değil: Bu ben bu proje üzerinde çalışmış son kez çalışıyordu çünkü

$ 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 

... Sadece çok deli, sadece bir veya iki gün önce! Ve şimdi çalışmıyor, ve sanırım bir şeyi değiştirmiş olmalıyım, ama dürüstçe, ne olabileceğini düşünemiyorum.

Yardım!

cevap

12

TL; DR: fsc, “hızlı derleme cin”, onun önbelleği ile ilgili bir sorun vardı; fsc -shutdown sorunu çözdü. Seth Tisuethe Scala IRC channel on FreeNode10, sorunumu çözmeme yardımcı oldu - fsc ile “hızlı çevrimdışı derleyici daemon” ile ilgili bir şey vardı. Bir komut dosyasını çalıştırmak için scala komutu kullanıldığında, fsc kullanır ve bir şekilde daemon tarafından kullanılan/önbelleğe alınan sınıf yolunun dağınık olduğu anlaşılır.

Bu geçici bir çözüm için birkaç yol vardır çıkıyor:

  • sadece tüm
    • işlerde FSC kullanmamayı -nocompdaemonscala için arg geçmek ve failproof olmalı, ama yavaş
  • koşmak fsc -shutdown cin otomatik yeniden başlatılacak
Hala

bilmiyorum dahaki sefere

  • muhtemelen kapatma daha hızlı ama en failproof seçenek olacaktır Cinin önbelleklerini sıfırlamak için scala
  • run fsc -reset kullanmak tam olarak bu sorunun ortaya çıkmasına neden olan şey, ancak Seth'den aldığım izlenim ve fsc sayfasından bu tür şeyler sadece bazen gerçekleşir.

    Teşekkürler, Seth!

  • +1

    İşlenecek _best_ yolu, sınıf yolu yönergelerindeki göreli yolları kullanmamaktır. –

    +1

    Teşekkür @ DanielC.Sobral, bu mantıklı, ancak bu komut dosyaları için pratik gibi görünüyor. Komut dosyasım bunun üst kısmında bulunuyor: '#!/Usr/bin/env scala -cp lib/* -deprecation ! #' Ve betiği bash'ın herhangi bir yerinden çağırmak istiyorum. Belki de bunu yapmanın daha iyi bir yolu var ama benim için belli değil, çünkü ben bir bash uzmanı ya da Scala uzmanı değilim. –

    +0

    Alternatif çağrı modunu kullanın - sh'i çağırın ve sonra sh'den çağrı scala'yı kullanın, o anda geçerli dizini almak için pwd'yi kullanabilirsiniz. –

    İlgili konular