lac*_*i37 9 java scala jar noclassdeffounderror remote-actors
我有一个使用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
Run Code Online (Sandbox Code Playgroud)
我在我的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 版本之间的版本不匹配。actor/Combinators.scala 出现在 2.8 中,Eclipse 插件是 2.8,但我包含了 2.7.7 scala-library.jar
| 归档时间: |
|
| 查看次数: |
2185 次 |
| 最近记录: |