如何解决在 Windows 上不会发生但在 Ubuntu 中会发生的 java 错误
我的公司正在转向使用 Ubuntu 的目标架构;我们正在从 Windows 迁移 Java 应用程序。我们的第一个应用程序在 Ubuntu 上遇到了这个错误(在 Win 上运行良好):
Error: A JNI error has occurred,please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: > org/apache/cxf/jaxrs/lifecycle/ResourceProvider
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Caused by: java.lang.ClassNotFoundException: org.apache.cxf.jaxrs.lifecycle.ResourceProvider
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 7 more
两种环境都运行 java 1.8 jdk/jre(不是 Ubuntu 上的 OpenJDK)。我们为 git 使用内部 CodeCloud,并且所有内容都在 Win 和 Ubuntu 中进行了更新。 Maven 显示所有依赖项都已满足;我什至可以展开 maven 类,可以看到 ResourceProvider 类。
我已阅读有关 Spring 和 CXF 的版本控制问题,但它指的是比我们正在运行的 CXF 版本旧的版本,而且我没有看到任何表明代码会在 Windows 环境中运行的原因,而不是'nix 环境。还有很多关于 WebLogic 的讨论,我们在服务器端使用带有 CXF 的嵌入式 Jetty。这是一个独立的控制台应用程序,不使用容器(如果这很重要的话)。
任何想法或提示将不胜感激。
编辑:此错误是在 Eclipse 中使用“作为 java 运行”发生的。调试器甚至没有命中 main 中的第一行代码。
解决方法
我重新开始使用这台机器并且能够让它运行。我相信我要么在 Linux 上安装 Oracle JDK 的“操作方法”不好,要么我遗漏了命令
update-alternatives - 安装 ... javac
update-alternatives - 安装 ... javaws
在执行这些步骤时,我应该更加注意,以便我可以提供更好的解决方案,但实际上,我只是不记得第一次输入这些命令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。