java - 为什么我可以使用 Scala REPL 中的 Java 库而不是脚本中的?

标签 java scala classpath

我正在编写一个使用 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

也不是在cp arg中使用*造成的:

$ 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 Tisuethe Scala IRC channel on FreeNode能够帮助我解决我的问题——它与 fsc 有关“快速离线编译器守护进程”。当 scala 命令用于运行脚本时,它使用 fsc,看起来守护进程使用/缓存的类路径以某种方式被弄乱了。

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

  • 将 arg -nocompdaemon 传递给 scala 以完全不使用 fsc
    • 可以工作,而且应该是防故障的,但是速度很慢
  • 运行 fsc -shutdown
    • 守护进程将在您下次使用 scala 时自动重启
  • 运行 fsc -reset 重置守护进程的缓存
    • 可能比关闭它更快,但最不防故障的选项

我仍然不知道究竟是什么导致了这个问题的发生,但是我从 Seth 和 fsc 页面得到的印象是这种事情有时会发生。

谢谢,赛斯!

关于java - 为什么我可以使用 Scala REPL 中的 Java 库而不是脚本中的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691769/

相关文章:

java - 如何填充包信息页面(package-info.java)上的类摘要字段?

java - 如何将 GridBagConstrains 中的 JLabels 置于顶部

Java迭代与递归

java - Spark 1.6 java.io.IOException : Filesystem closed

java - 如何识别 Java 类路径中的内容?

java - Java 类路径汇编如何工作?

java - 如何从 Java 获取 src/main/resources 路径

java - 从 Java 传递到 C 后未初始化的 JNA 结构数组

scala - scala中的 curry 函数

scala - 在 Scala 中处理无效参数的最佳方法是什么