2012-10-16 20 views
10

Scala ile ilgili deneyimim yok, bu nedenle bu soru temel olabilir. Bu derste "Kişi" örneğine dayanarak Java içinden Scala sınıfını kullanmaya çalışıyorum: http://www.codecommit.com/blog/java/interop-between-java-and-scalaNoClassDefFoundError, Scala sınıfını Java'dan kullanıyor

Aşağıdaki gibi iki kaynak dosyası, bir Scala ve bir Java oluşturuyorum.

Person.scala:

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

Test.java: Ben çalıştırmayı denediğinizde

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

I (Anlamadığım bir uyarı ile) derlemek, ama ben bir ClassNotFoundException olsun program

 
$ 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 

Hata yaptığım hakkında bir fikriniz var mı?

+0

Nedeni [burada] şeklindedir (http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html) – gks

+2

mü gözden geçirin sınıf yolunda scala-library.jar var mı? Ben hata altına aldık aynı örneği çalışırken –

+0

iken, yardım lütfen .. 'C: \ Users \ kullanıcı1 \ Masaüstü> java cp:. Scala-kütüphane-2.11.8.jar Testi Hata: bulunamadı veya load main class Test ' – rinuthomaz

cevap

12

Scala sınıflarını kullanabilmek için Scala çalışma zamanı kitaplığı eklemeniz gerekir. Bu, hem derleyici uyarısının hem de çalışma zamanında hatanın sebebidir.

bu

java -cp .:scala-library.jar Test 

(kavanoz dosyanın adı farklı olabilir, ama mesele Sınıfyolu eklemek için) deneyin.

+0

Bunun sıradan bir şey olacağını biliyoruz. Teşekkürler! – del

+0

Maven kullanırken bu kütüphaneyi CLASSPATH'e nasıl ekleyebilirim? –

+0

@KevinMeredith: Uygulamayı oluşturmak veya çalıştırmak için Maven kullanıyor musunuz? – Thilo

2

Scala-library.jar dosyasını sınıf yolunuza koydun mu? Bunu unuttuğunuz için, JVM Scala çalışma zamanı için bir iç sınıf bulamıyor. Bağlantınız http://www.codecommit.com/blog/java/interop-between-java-and-scala yılında

:

istisna için

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

İlgili konular