我正在研究使用Joda Time的Scala脚本。到今天为止,一切正常。不知何故,某些内容已更改,并且不再起作用。

这有效:

$ 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

也不是由* arg中的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

…真是太疯狂了,因为这是我上一次从事此项目的工作,就在一两天前!现在它不起作用了,我想我肯定已经做了一些更改,但是老实说,我无法想到它可能是什么。

帮助!

最佳答案

TL; DR:“快速编译守护程序” fsc的缓存出现问题; fsc -shutdown解决了该问题。

Seth Tisue中的the Scala IRC channel on FreeNode能够帮助我解决问题-与``快速脱机编译器守护程序 fsc ''有关。当使用scala命令运行脚本时,它使用了fsc,似乎以某种方式弄乱了守护程序使用/缓存的类路径。

事实证明,有几种方法可以解决此问题:

  • 将arg -nocompdaemon传递给scala以完全不使用fsc
  • 有效,并且应该具有故障预防功能,但
  • 较慢
  • 运行fsc -shutdown
  • 下次使用scala时,守护程序将自动重新启动
  • 运行fsc -reset以重置守护程序的缓存
  • 可能比关闭它更快,但是最不可靠的选项

  • 我仍然不知道到底是什么导致了此问题的发生,但是从塞思和fsc页面上获得的印象是,这种事情有时会发生。

    谢谢,塞思!

    09-11 18:04