web-dev-qa-db-ja.com

このコードを実行しようとすると、なぜ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
15
mcandre

あなたの問題は、scalaライブラリがランタイムクラスパスにないことだと思います。手動で手動で追加する必要があります。

Mavenやsbtなどのツールを使用している場合は、依存関係がコンパイル済みではなく提供済みとしてマークされている可能性があります。

これらのツールを使用していない場合は、ライブラリディレクトリに「scala-library.jar」を追加してください

8
fhuertas

また、適切なバージョンのScalaがないため、この問題が発生しています。 IntelliJを使用している場合は、scala SDK underFile>プロジェクト構造>グローバルライブラリ

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"
5
Yuchen Zhong