簡體   English   中英

運行Scala jar文件時出現NoClassDefFoundError

[英]NoClassDefFoundError when running Scala jar file

我有一個使用RemoteActors的小應用程序,我想從中創建一個jar文件。 當我嘗試執行它時會得到以下異常:

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

我在我的jar文件中包含了scala-library.jar,它位於類路徑中。 否則java將停止查找類ScalaObject

Java不處理“jar中的jar”。 默認的類加載器無法以這種方式加載類。

從你的堆棧跟蹤,看起來你已經使用了eclipse的export-> java-> runnable jar。 它應該包含一個特殊的類加載器,它在jar加載中處理jar但似乎沒有工作。

我猜想構建jar會出現問題,或者scala被包含在你的jar和classpath中時會感到困惑。 您可以使用“將庫提取到jar”而不是“將庫打包到jar”中再次嘗試此操作。 您可以在類路徑上沒有scala的情況下嘗試它。

如果你想要一個可運輸的罐子,那么還有其他選擇:

  • 你可以解壓縮你所依賴的所有罐子並用你編譯的類重新包裝它們(應該是上面的“extract”)。 Maven的陰影插件可以幫助解決這個問題。

  • 您可以使用另一種解決方案來提供可以加載嵌套jar的類加載器實現,例如OneJar

希望這很有用,如果你需要更多的幫助,你需要准確描述你制作這個jar的步驟,可能“jar tvf myjar.jar”的輸出也會有所幫助。

問題是Eclipse上的Scala插件與安裝的Scala版本之間的版本不匹配。 actors / Combinators.scala出現在2.8中,而Eclipse插件是2.8但是我包含了2.7.7 scala-library.jar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM