NoClassDefFoundError 与 sbt 和 scala.swing
NoClassDefFoundError with sbt and scala.swing
我是 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 stdlib 中似乎是一个 class/trait)
对 SO 和其他地方的阅读表明,当编译时出现的代码无法在 运行 时随后定位时,通常会发出这种异常。确实,代码编译得很好,只有在 运行 编译代码时才会出现问题。
我找到的所有建议都是为了协调您的 classpath
以解决这些问题。但是,如果相信 sbt
控制台,我的编译时和 运行 时 class 路径是相同的:
> 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 中还有其他几个没有任何问题的小项目。令人困惑的是 "missing" class 似乎是 scala 标准库 material.
NoClassDefFoundError
指出了一个问题,您混合了为不同主要 Scala 版本编译的库。如果您使用 Scala 2.12,则还必须使用具有匹配版本的 Swing 模块。在 Scala 2.11 之前,Swing 已经发布了这样的神器:
"org.scala-lang" % "scala-swing" % scalaVersion.value
然后它被移动到 org.scala-lang.modules
组。您的构建文件应包含如下内容:
scalaVersion := "2.12.1"
libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "2.0.0-M2"
(似乎最新的 Scala 2.11 兼容版本 "1.0.2"
尚未针对 Scala 2.12 发布,因此您需要直接跳转到 "2.0.0-M2"
,它应该主要是源代码兼容的)。
我是 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 stdlib 中似乎是一个 class/trait)
对 SO 和其他地方的阅读表明,当编译时出现的代码无法在 运行 时随后定位时,通常会发出这种异常。确实,代码编译得很好,只有在 运行 编译代码时才会出现问题。
我找到的所有建议都是为了协调您的 classpath
以解决这些问题。但是,如果相信 sbt
控制台,我的编译时和 运行 时 class 路径是相同的:
> 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 中还有其他几个没有任何问题的小项目。令人困惑的是 "missing" class 似乎是 scala 标准库 material.
NoClassDefFoundError
指出了一个问题,您混合了为不同主要 Scala 版本编译的库。如果您使用 Scala 2.12,则还必须使用具有匹配版本的 Swing 模块。在 Scala 2.11 之前,Swing 已经发布了这样的神器:
"org.scala-lang" % "scala-swing" % scalaVersion.value
然后它被移动到 org.scala-lang.modules
组。您的构建文件应包含如下内容:
scalaVersion := "2.12.1"
libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "2.0.0-M2"
(似乎最新的 Scala 2.11 兼容版本 "1.0.2"
尚未针对 Scala 2.12 发布,因此您需要直接跳转到 "2.0.0-M2"
,它应该主要是源代码兼容的)。