2011-12-15 27 views
9

RemoteActors ile küçük bir uygulamam var ve bundan bir jar dosyası yapmak istiyorum. Bunu yürütmeye çalıştığınızda bu durum alır: Benim Kavanoz dosyasında Scala-library.jar dahil ettikNoClassDefFoundError, Scala jar dosyasını çalıştırırken

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.NoClassDefFoundError: scala/actors/Combinators 
    at pingpong.PingApp$.main(PingApp.scala:5) 
    at pingpong.PingApp.main(PingApp.scala) 
    at pingpong.ScalaEntryPoint.main(ScalaEntryPoint.java:5) 
    ... 5 more 
Caused by: java.lang.ClassNotFoundException: scala.actors.Combinators 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    ... 8 more 

ve sınıf yolunda olduğunu. Aksi halde java, ScalaObject sınıfını bulmakta duracaktır.

+0

Daha fazla çalışma zamanı iyi olurdu. Maven ile bir kavanoz yapmaya mı çalışıyorsun? Ya da sadece Eclipse ile koşmak mı? – hellectronic

+1

En azından, çağırdığınız komut satırını gösterin ve kullandığınız Scala'nın sürümünü belirtin. – retronym

+0

komut: java -jar myjar.jar Kullanıyorum scala 2.7.7 final – laci37

cevap

1

Sorun, Eclipse'deki Scala eklentisi ve yüklü Scala sürümü arasındaki bir sürüm uyuşmazlığıydı. aktörler/Combinators.scala 2.8'de göründü ve Eclipse eklentisi 2.8 idi ancak 2.7.7 scala-library.jar içerdi

4

Java "kavanoz içindeki kavanoz" işlemez. Varsayılan sınıf yükleyici, sınıfları bu şekilde yükleyemez.

Stacktrace'inizden, eclipse'in export-> java-> runnable jar'ını kullandınız. Kavanoz yüklemesinde kavanozu işleyen özel bir sınıf yükleyiciyi içermesi gerekiyor ama işe yaramıyor gibi görünüyor.

Kavanozun içinde bir şeylerin yanlış gittiğini tahmin ediyorum ya da her ikisi de kavanozunuzda ve sınıf yolunuzda bulunan scala ile karıştırılıyor. Bunu "jarler içine paket kütüphaneleri" yerine "kütüphaneleri jarte ayıkla" kullanarak tekrar deneyebilirsiniz. Sınıf yolunda scala olmadan deneyebilirsiniz.

tek yerine gönderilebilir kavanoz istiyorsanız diğer seçenekleri olduğunu Başarısız:

  • Sen bağlıdır kavanoz tüm açmak ve "özü" Ne olmalıdır (derlenmiş sınıfları ile bunları paketleyin edebilir yapar ile elde edilmiş). Maven'in shade eklentisi bu konuda yardımcı olabilir.

  • Sen tam olarak ne adım adım tarif etmek gerek daha fazla yardıma ihtiyaç varsa bu yararlıdır OneJar

Hope gibi iç içe kavanoz yükleyebilirsiniz bir classloader uygulanmasını sağlayacak farklı bir çözüm kullanabilirsiniz Bu kavanoz üretmek için almak ve muhtemelen "jar tvf myjar.jar" çıktısı da yardımcı olacaktır.

+0

Scala kütüphanesini jar dosyasına çıkarmayı denedim, ancak sonuç aynı istisnadır. Görünüşe göre scala-library.jar içinde scala.actors.Combinators sınıfı var. – laci37

+0

"jar tvf myjar.jar" komutunu çalıştırabilir ve scala-lang'in orada gösterildiğinden emin olabilir misiniz? Durum buysa, (jar xvf) myjar.jar dosyasını geçici bir klasöre alın ve sonra aynı şekilde mevcut olan scala-lang.jar dosyasını inceleyin. –

+0

kavanoz tvf ping.jar | grep scala-lang sonuç göstermiyor. Kavanozu çıkardım ve scala-lang adında bir dosya bulamadım. – laci37

İlgili konular