我用jdk 1.6编译了我的Java代码。
我在项目构建路径中使用MQ jar文件(来自MQ version 8.0)。
我的应用服务器使用jdk 1.6运行。
服务器上安装了MQ 8.0版。
现在,当我在服务器中部署我的应用程序时,我收到如下错误:
java.lang.UnsupportedClassVersionError“和与主要版本50、51等相关的错误。
我在这里理解了版本的概念,但我有点困惑,因为为什么在运行时会发生版本不匹配的情况,因为在类路径中它引用的JAR文件与项目构建期间相同。是不是因为MQ jars是用51编译的,它的版本高于50?请告诉我这里可以做些什么。
发布于 2018-09-28 18:04:38
@JoshMc对java和mq jars的版本不匹配的解释是完全正确的。
我想补充的是,虽然我可以通过查看51和50之间的不匹配来理解发生错误时的错误,但我的问题是以某种方式连接到MQ并使应用程序在不更改现有安装的情况下运行。这就是为什么我不能把我的java升级到JDK 1.7。
然而,我通过在Weblogic Server的类路径中使用旧的MQ7JAR解决了我的问题。因为我的应用程序表现得像一个客户端,所以连接到MQ服务器时不会有任何问题,MQ服务器使用的是MQ版本8,而MQ是用Java6构建的。所以我只是复制了一个文件夹中的旧MQ7JAR,并在我的Weblogic CLASSPATH引用中使用了该路径,这就解决了我的问题。
发布于 2018-09-26 07:19:44
要使用IBM MQ v8及更高版本附带的jar文件,您必须使用Java7或更高版本。MQ v8和更高版本中的文档指出,用于Java和JMS的IBM类是使用Java7构建的。Oracle文档是使用Java7构建的类不能用于Java6。有关参考,请参阅以下内容:
MQ v8.0 KC页面中的
用于Java的IBM类和用于JMS的IBM类现在是使用Java7构建的。
Java7运行时环境支持运行早期版本的类文件。
MQ v9.0 KC页面中的
从IBM MQ 8.0版开始,用于Java的IBM MQ类和用于JMS的IBM MQ类是使用Java7构建的。Java7运行时环境支持运行早期版本的类文件。
根据规范,JavaSE7的类文件版本是51,这是因为JSR292引入了invokedynamic字节码。Java 6.中不能使用JavaSE7编译器生成的版本51类文件
https://stackoverflow.com/questions/52492863
复制相似问题