2013-01-19 56 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" 
相關問題