gpt4 book ai didi

java - 运行 Scala jar 文件时出现 NoClassDefFoundError

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:54 26 4
gpt4 key购买 nike

我有一个带有 RemoteActor 的小应用程序,我想从中制作一个 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 时出了点问题,或者它被同时包含在 jar 和类路径中的 scala 弄糊涂了。您可以使用“将库提取到 jar”而不是“将库打包到 jar”再试一次。您可以在类路径上没有 scala 的情况下尝试它。

如果您想要一个可运输的 jar,则没有其他选择:

  • 您可以解压所有您依赖的 jar,然后用您编译的类重新打包它们(应该是上面“提取”所做的)。 Maven 的 shade插件可以帮助解决这个问题。

  • 您可以使用不同的解决方案来提供可以加载嵌套 jar 的类加载器实现,例如 OneJar

希望这很有用,如果您需要更多帮助,您需要准确描述生成此 jar 所采取的步骤,“jar tvf myjar.jar”的输出可能也会有所帮助。

关于java - 运行 Scala jar 文件时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com