【发布时间】:2017-05-10 03:50:12
【问题描述】:
我是 JVM 领域的新手,所以如果这是一个常见问题,我深表歉意。我在 OSX 上使用 Scala (2.12) 和 sbt 0.13.13。
我正在开发一个依赖于 GUI 库 scala.swing (2.10.x) 的小型应用程序。我几乎立即使用示例代码 (http://otfried.org/scala/index_28.html) 遇到了运行时问题。
具体来说,在调用 sbt run 时,我得到一个堆栈跟踪,以:
[error] (run-main-0) java.lang.NoClassDefFoundError: scala/Proxy$class
java.lang.NoClassDefFoundError: scala/Proxy$class
at scala.swing.Window.<init>(Window.scala:25)
at scala.swing.Frame.<init>(RichWindow.scala:75)
at scala.swing.MainFrame.<init>(MainFrame.scala:19)
(Proxy 似乎是 scala 标准库中的一个类/特征)
阅读 SO 和其他地方表明,当编译时出现的代码随后在运行时无法定位时,通常会发出这种异常。确实,代码编译得很好,只是在运行代码时才会出现问题。
我发现的所有建议都是协调您的classpath 以解决这些问题。但是,如果相信 sbt 控制台,我的编译时和运行时类路径是相同的:
> show compile:fullClasspath
[info] * Attributed(/Users/chris/Projects/thing2/target/scala-2.12/classes)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.1.jar)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-swing/jars/scala-swing-2.10.6.jar)
[success] Total time: 0 s, completed Dec 24, 2016 7:01:15 PM
> show runtime:fullClasspath
[info] * Attributed(/Users/chris/Projects/thing2/target/scala-2.12/classes)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.1.jar)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-swing/jars/scala-swing-2.10.6.jar)
[success] Total time: 0 s, completed Dec 24, 2016 7:01:19 PM
所以,我发现自己陷入了法医僵局。任何关于下一步看哪里的建议将不胜感激。为清楚起见,到目前为止,这仅发生在 scala.swing 上。我在 Scala 中还有其他几个没有任何问题的小项目。令人困惑的是“缺失”类似乎是 scala 标准库材料。
【问题讨论】:
-
如果您尝试在 Scala 2.12 中使用
scala.swing的 2.10.x 版本,那么问题可能是因为版本不兼容。使用2.12版本的scala.swing -
我认为大多数 Scala 库不向后或向前兼容
-
我认为 2.10.x 指的是
scala.swing的内部版本。 github.com/scala/scala-swing 的文档表明 swing 2.x 分支是用于 scala 2.12 的正确分支 -
看看那个页面上写着“2.11 的最新版本”,你能用 Scala 2.11 试试你的程序,看看它是否有效吗?
-
我挣扎了一阵子,最后只是切换到:scalafx.org