【问题标题】:UnsupportedClassVersionError in Webphere 8.5 due to classpath由于类路径,Websphere 8.5 中出现 UnsupportedClassVersionError
【发布时间】:2016-10-26 11:30:42
【问题描述】:

Websphere 8.5.5.5 的 WEB-INF/lib 中的 2 个 jar 具有相同的目录结构 org.json.* 。

json.jar 用JDK 1.6编译

用 JDK 1.7 编译的 commonlib.jar

我在一个环境中的 JVM 启动期间收到以下异常,而另一个环境具有相同的 jars 和相同的类路径,但它可以正常工作。由于出现 UnsupportedClassVersionError,WAS 正在运行 Java 1.6

6/23/16 15:59:32:091 CDT] 0000005e InjectionProc W CWNEN0047W:jmaki.xhp.XmlHttpProxyServlet 类的字段上的资源注释将被忽略。由于异常无法获取注释:java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=org/json/JSONObject,偏移量=6

当我专门将第二个jar添加到第二个环境的类路径中时会出现上述错误,否则它可以正常工作是不是由于类路径顺序?

class load: org.json.JSONException from: file:/hosting/configs/WebSphereD24/AppServer/installedApps/nodea/sear/swar/WEB-INF/lib/json.jar
class load: org.json.JSONObject$Null from: file:/hosting/configs/WebSphereD24/AppServer/installedApps/nodea/sear/swar/WEB-INF/lib/json.jar

WebSphere 如何决定从 .jar 加载 class=org/json/JSONException 的 jar。这个类存在于两个罐子中......它是如何从一个中的 json.jar 和另一个中的 common.jar 加载的。

【问题讨论】:

  • 不,这是因为试图将 1.7 类加载到 1.6 JVM 中。这肯定很明显吗?
  • 嗯,还有另一个与第一个相同的环境(服务器)。它也可以在 Java 1.6 上运行。并且具有相同的 jar 和类路径。但除非在上面的类路径中明确提及,否则它不会引发冲突。
  • 所以有问题的 JAR 没有被加载。它仍然是一个不正确的情况,有明显的修复。
  • 解决问题不是这里的问题。Websphere 如何决定 jar 从 .这个类存在于两个 jars 中......它是如何从一个中的 json.jar 和另一个中的 common.jar 加载的
  • 如果“修复不是问题”,那么问题是什么?

标签: java json jar websphere classpath


【解决方案1】:

未指定 WEB-INF/lib JAR 的顺序,因此该顺序通常由文件系统定义。您应该删除重复的类,而不是试图依赖任何特定的顺序。

【讨论】:

  • 好的。我已经在类路径中提到了 json.jar,如上图所示。问题已解决。所以我们不能依赖 WebSphere jar 加载。
  • @Nayeem 不建议修改 JVM 类路径(参见知识中心 Java virtual machine settings 主题的“类路径”部分)。最好的解决方法是从 WAR 中删除导致问题的 JAR。如果这不可能,define a shared library 并与服务器关联(或使用与应用程序隔离的共享库)。
  • 隔离共享库与其他共享库不同吗?
  • 将共享库与服务器相关联使该库可用于服务器中的所有应用程序,但它位于与 JVM 类加载器不同的类加载器中,因此不会有破坏产品的风险。将隔离的共享库与应用程序相关联使该库仅对这些应用程序可用。最终结果应该是一样的。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2016-08-03
相关资源
最近更新 更多