我用jdk 1.6编译了Java代码。
我在项目构建路径中使用MQ jar文件(从MQ版本8.0开始)。
我的应用程序服务器在jdk 1.6上运行。
服务器中安装了MQ版本8.0。
现在,当我将应用程序部署到服务器中时,出现了类似错误:
java.lang.UnsupportedClassVersionError”和与主要错误有关的错误 版本50、51等。
我在这里理解了版本的概念,但是我很少感到困惑,因为为什么在运行时中会发生版本不匹配的情况,因为在类路径中它引用的项目与项目构建期间的JAR文件相同。是否由于MQ罐已在高于50的版本中进行了编译而在51中进行编译?请告知可以在这里做什么。
答案 0 :(得分:1)
要使用IBM MQ v8和更高版本随附的jar文件,您必须使用Java 7或更高版本。从MQ v8起的IBM文档,以及后来的Java和JMS的IBM MQ类是使用Java 7构建的。使用Java 7构建的类的Oracle文档不能与Java 6一起使用。请参见以下参考资料:
在MQ v8.0 KC页面中:IBM MQ 8.0.0>IBM MQ>Product overview>What's changed in IBM MQ Version 8.0.0>Java: changes for Java 7
现在已构建了Java的IBM MQ类和JMS的IBM MQ类。 使用Java 7。
Java 7运行时环境支持运行早期的类文件 版本。
在MQ v9.0 KC页面中:IBM MQ 9.0.x>IBM MQ>Technical overview>IBM MQ Java language interfaces
从IBM MQ版本8.0开始,用于Java的IBM MQ类和用于Java的IBM MQ类 JMS是使用Java 7构建的。 Java 7运行时 环境支持运行早期的类文件版本。
Oracle文档在以下页面中指出Java 7类文件不能与Java 6一起使用: Oracle Java SE 7 and JDK 7 Compatibility -> Binary Compatibility声明以下内容:
根据JVM,Java SE 7的类文件版本为51 。 规范,因为由引入的invokedynamic字节码 JSR292。 Java SE 7编译器生成的版本51类文件 不能在Java SE 6中使用。
答案 1 :(得分:0)
@JoshMc对Java和mq jar以及所有版本的版本不匹配的解释是绝对正确的。
我想补充一点,尽管我可以通过看到51和50之间的不匹配来理解该错误,但是我的问题是要以某种方式连接到MQ,并使该应用程序在不更改现有安装的情况下运行。这就是为什么我无法将Java升级到JDK 1.7的原因。
但是,我通过在Weblogic Server的类路径中使用旧的MQ 7 jar解决了我的问题。因为当我的应用程序表现为客户端时,使用MQ 6(已使用Java 6构建)连接到版本8的MQ服务器时,将不会出现任何问题,因此我只是将旧的MQ 7 jar复制到了文件夹中并使用我的Weblogic CLASSPATH参考中的该路径即可解决我的问题。