当我尝试运行此代码时,为什么会出现java.lang.NoClassDefFoundError?

时间:2013-01-19 19:06:55

标签: scala classnotfoundexception

我想映射字符串中的字符,但是我遇到了运行时错误。

示例:

object Hello {
    def hello(c: Char) {
        print(c)
    }

    def main(args: Array[String]) {
        "Hello World!".map(hello)
    }
}

跟踪:

scalac Hello.scala
java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: scala/LowPriorityImplicits
    at Hello.main(Hello.scala)
Caused by: java.lang.ClassNotFoundException: scala.LowPriorityImplicits
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more
make: *** [test] Error 1

2 个答案:

答案 0 :(得分:8)

我认为您的问题是scala库不在您的运行时类路径中。你必须手动手动添加。

如果您使用的是maven或sbt等工具,则可能会将依赖项标记为已提供而非编译。

如果您不使用这些工具,请将“scala-library.jar”添加到您的库目录

答案 1 :(得分:4)

也看到了这个问题,因为我没有正确的Scala版本。对于使用IntelliJ的用户,您可以在文件>下添加/更改scala SDK。 项目结构> 全球图书馆

enter image description here

如果要在命令行中编译和运行项目,请确保安装了正确版本的Scala。例如:

检查安装的Scala版本:

$ scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL

检查 build.sbt 以获得正确版本的Scala:

scalaVersion := "2.11.8"