2012-10-16 11 views
10

私はScalaの経験がないので、この質問は初心者かもしれません。 http://www.codecommit.com/blog/java/interop-between-java-and-scalaNoClassDefFoundError JavaのScalaクラスを使用

2つのソースファイル、1つのScalaと1つのJavaを次のように作成します。

Person.scala:

class Person { 
    def getName() = "Daniel Spiewak" 
} 

Test.java:

public class Test { 
    public static void main(String[] args) { 
    Person p = new Person(); 
    p.getName(); 
    } 
} 

私は(私は理解していない警告で)コンパイルすることができますが、私が実行しようとすると、私はClassNotFoundExceptionが取得プログラム。

 
$ scalac Person.scala 
$ javac Test.java 
./Person.class: warning: Cannot find annotation method 'bytes()' in type 'ScalaSignature': class file for scala.reflect.ScalaSignature not found 
1 warning 
$ java Test 
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:787) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:447) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     at Test.main(Test.java:3) 
Caused by: java.lang.ClassNotFoundException: scala.ScalaObject 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     ... 13 more 

私は間違っていると思いますか?

+0

例外の原因は、[ここ](http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html)である – gks

+2

がした確認してくださいクラスパスにscala-library.jarを含めますか? –

+0

同じ例を試してみましたが、以下のエラーが表示されています。 'C:\ Users \ user1 \ Desktop> java -cp:scala-library-2.11.8.jarテスト エラー:メインクラスをロードするTest' – rinuthomaz

答えて

12

Scalaクラスを使用できるようにするには、Scalaランタイムライブラリをインクルードする必要があります。これは、コンパイラの警告と実行時のエラーの両方の原因です。

この

java -cp .:scala-library.jar Test 

(jarファイルの名前が異なる場合がありますが、ポイントは、あなたのクラスパスに追加することで)試してみてください。

+0

それは何か普通のことだと分かっていました。ありがとう! – del

+0

Mavenを使用している場合、このライブラリをCLASSPATHにどのように追加できますか? –

+0

@KevinMeredith:Mavenを使用してアプリケーションをビルドまたは実行していますか? – Thilo

2

classpathにscala-library.jarを入れましたか?これを忘れてしまったので、JVMはScalaランタイムの内部クラスを見つけることができません。

http://www.codecommit.com/blog/java/interop-between-java-and-scalaあなたのリンクで:

Just stick scala-library.jar on your classpath and all of your Scala classes should be readily available within your Java application.

関連する問題