2013-01-19 55 views
13

我想映射字符串中的字符,但我得到运行时错误。当我试图运行这段代码时,为什么会得到java.lang.NoClassDefFoundError?

例子:

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 
+6

它有什么用映射,您有相关问题你的班级路径。如果你用'java'命令运行你的代码,将scala-library.jar添加到cp - java不知道关于scala的任何信息,而且它是一些比特。或者用'scala'命令运行代码。 –

+6

用'scala Hello'而不是'java Hello'运行你的程序。 – Jesper

+0

@Jesper谢谢! – mcandre

回答

7

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

如果您使用的工具如maven或sbt,可能依赖项被标记为提供,而不是编译。

如果不使用这些工具,加上“斯卡拉 - library.jar”到您的图书馆目录

0

也看到这个问题,因为我没有斯卡拉的正确版本。如果你是编译和命令行运行项目

enter image description here

:对于那些谁使用的是IntelliJ,您可以添加/更改阶SDK下文件>项目结构>全球图书馆 ,确保你也安装了正确的Scala版本。例如:

检查安装斯卡拉版本:

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

检查build.sbt有斯卡拉的正确版本:

scalaVersion := "2.11.8" 
相关问题