使用Scala Plugin for Eclipse的noClassDefFoundError

时间:2010-03-29 01:15:06

标签: eclipse scala build

我使用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")
 }
}

7 个答案:

答案 0 :(得分:10)

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

如果你的项目没有编译,可能是因为你错过了一个错误(如果在Problems视图中没有报告这个错误可能是一个错误,在这种情况下请打开一张票在Trac上)或因为你已经关闭了自动构建而没有完成项目的手动构建。

答案 1 :(得分:3)

我遇到了同样的问题。 Project没有编译,但没有突出显示错误,AFAIK代码没问题。这似乎是运行配置的问题。

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

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

答案 2 :(得分:2)

当运行“clean”并没有解开Eclipse时,我接下来尝试保存我的工作,退出Eclipse并重新启动。这通常会让事情再次发生,但并非总是如此。有几次我不得不用更新版本更新Scala插件(我每晚使用最新版本),让事情再次发挥作用。我怀疑这是否有效,因为新插件碰巧修复了这个bug,而是期望加载新插件会给出整个Eclipse-Scala 系统“完全重置”,使其不受限制。

答案 3 :(得分:1)

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

  1. 删除所有.java文件
  2. 根据需要编辑scala代码,以便在没有它们的情况下进行编译。
  3. 重新添加.java文件。
  4. 重新编辑scala代码。
  5. 此处给出的其他解决方案对我不起作用。我尝试过:清理项目,重新启动Eclipse,关闭和开放项目,创建一个新的.scala文件。没有快乐。

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

    我的症状是:

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

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

答案 4 :(得分:0)

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

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

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

Scala 2.8.3插件;没有编译错误

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

当我创建一个名为“common”的新包对象时,我遇到了这个错误(编译在sbt中工作但在eclipse中失败)。在eclipse中删除包对象导致编译错误消失。其中没有任何东西。

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