【问题标题】:noClassDefFoundError using Scala Plugin for EclipsenoClassDefFoundError 使用 Eclipse 的 Scala 插件
【发布时间】:2011-02-01 21:09:00
【问题描述】:

我使用 Scala 插件在 Eclipse 中成功实现并运行了几个 Scala 教程。然后突然想编译运行一个例子,出现了这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: hello/HelloWorld
Caused by: java.lang.ClassNotFoundException: hello.HelloWorld
 at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)

此后,我无法再在 Eclipse 中运行任何 Scala 程序。我尝试清理和重建我的项目,关闭并重新打开我的项目,以及关闭和重新打开 Eclipse。

Eclipse 版本号 3.5.2 和 Scala 插件 2.8.0

这里是原始代码:

package hello

object HelloWorld {
 def main(args: Array[String]){
  println("hello world")
 }
}

【问题讨论】:

  • $PROJECT/bin/hello里面有HelloWorld.class文件吗? (您可以使用“导航器”视图进行检查)。

标签: eclipse scala build


【解决方案1】:

我在创建一个名为“common”的新包对象时遇到了这个错误(编译在 sbt 中有效,但在 eclipse 中失败)。在 eclipse 中删除包对象导致编译错误消失。里面什么都没有。

我正在使用 sbt-eclipse 构建 eclipse 项目。我正在使用 scala eclipse 3.0.0-vfinal-20130326-1146-Typesafe。

【讨论】:

    【解决方案2】:

    我也遇到了这个错误,但是在执行了这里的建议(清理、删除运行配置等)之后,我意识到我错误地设置了工作区,这就是找不到类的原因。

    当您尝试编译 java 项目时发生同样的错误时,表明这是一个问题。

    【讨论】:

      【解决方案3】:

      我在一个结合了 .java 和 .scala 文件的项目中遇到了这个问题。 我的解决方案是:

      1. 删除所有 .java 文件
      2. 根据需要编辑 scala 代码,以便在没有它们的情况下进行编译。
      3. 重新添加 .java 文件。
      4. 重新编辑 scala 代码。

      这里给出的其他解决方案对我不起作用。我试过:清理项目,重新启动 Eclipse,关闭并打开项目,创建一个新的 .scala 文件。不开心。

      我在 Ubuntu Linux 11.10 上使用 Eclipse 3.7(最新稳定版)、Scala IDE 2.0.0 和 Scala 2.9。

      我的症状是:

      • 我的项目正在运行,但随后它无缘无故停止了编译。 IDE 没有显示 .scala 文件的任何编译错误,但输出目录中没有 .class 文件,如果我尝试运行任何东西,我会得到 NoClassDefError。
      • 如果我在 .scala 文件中故意创建错误,则确实会被视为编译错误。
      • .java 文件由于缺少 scala 类而注册错误。

      我想 .java/.scala 混合的 IDE 插件中的某处可能存在引导错误。我已经用这个设置完成了混合项目,没有问题,所以它只在某些情况下触发。我不知道触发是什么,但是一旦触发,就没有好的解决方案。

      【讨论】:

        【解决方案4】:

        我已将我唯一的类/对象/应用程序移动到一个包中,但没有添加 package 声明。

        sbt 编译并运行良好;日食不会

        在文件顶部添加package 声明修复了它。

        Scala 2.8.3 插件;没有编译错误

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题。项目无法编译,但没有突出显示错误,并且 AFAIK 代码正常。运行配置似乎有问题。

          解决方案 1:删除对象的现有运行配置并创建一个新的

          解决方案 2:创建一个新对象并将所有代码剪切/粘贴到该文件中

          【讨论】:

            【解决方案6】:

            当运行“clean”并没有解除 Eclipse 时,我接下来尝试保存我的工作,退出 Eclipse,然后重新启动。这通常会让事情重新开始,但并非总是如此。有几次我不得不用更新的版本更新 Scala 插件(我正在使用最新的 nightly 版本),才能让事情再次正常运行。我怀疑这是否有效,因为新插件恰好修复了该错误,而是期望加载新插件会提供整个 Eclipse-Scala 系统进行“完全重置”,使其脱离软管。

            【讨论】:

              【解决方案7】:

              如果您在尝试作为 Scala 应用程序运行时看到这一点,那么最可能的解释是您的项目没有编译并且没有生成类文件。请检查是否是这种情况:在项目的输出文件夹中查找 hello/HelloWorld.class。

              如果您的项目没有编译,那可能是因为您遗漏了一个错误(如果此错误未在问题视图中报告,则可能是错误,在这种情况下,请开票在 Trac 上)或者因为您关闭了自动构建并且没有手动构建您的项目。

              【讨论】:

              • 输出文件夹中没有文件。不幸的是,我昨天重新安装了我的环境以使一切正常,因此我无法进一步排除故障。
              • 对我来说,运行配置似乎以某种方式损坏或设置不正确,但我找到了一个“解决方案” - 见下文
              • 我遇到了同样的问题:HelloWorld$.class 在输出文件夹中,但没有 HelloWorld.class。清洁解决了问题。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-03-30
              • 2011-04-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-06
              • 2012-10-31
              相关资源
              最近更新 更多