为什么我们的 MobileFirst Java 适配器会收到不匹配的 Java 版本消息?
Why do we get a mismatching Java version message for our MobileFirst Java adapters?
我们正在使用安装在 Eclipse Luna 4.4.2 之上的 MobileFirst Platform Studio 7.1(我相信 Eclipse 带有自己的嵌入式 Java 编译器 - according to the Workspace properties, the "Compiler Compliance Level" 设置为 1.7)。
当我们构建 .adapter
文件,然后通过解压缩将其拆开并使用 file myadapter.adapter
检查其中一个 .class
文件的版本时,它显示 myadapter.adapter: compiled Java class data, version 51.0
, which corresponds to Java Platform 7 (1.7).
但是,当我们将它部署到我们的独立 MobileFirst 平台服务器时,运行 在 WAS ND 之上,我们在 MobileFirst 管理控制台和 WAS SystemOut.log 中都遇到错误:
[11/3/15 11:56:07:166 UTC] 0000009b StatusMessage E StatusMessage createStatusMessage Preparation to deploy adapter 'MyAdapter' failed.
java.lang.Error: The adapter was built with a later version of Java than is used to run the server.
at com.worklight.adapters.rest.ParentLastClassLoader.defineClass(ParentLastClassLoader.java:274)
at com.worklight.adapters.rest.ParentLastClassLoader.defineClassFromURL(ParentLastClassLoader.java:233)
at com.worklight.adapters.rest.ParentLastClassLoader.internalFindClass(ParentLastClassLoader.java:215)
at com.worklight.adapters.rest.ParentLastClassLoader.loadClass(ParentLastClassLoader.java:128)
服务器上的Java等级也是1.7,如图java -version
:
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (rhel-2.3.4.1.el6_3-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
我不认为这个错误是正确的,除非验证 JDK 级别的方式有一些微妙之处(也许它也在查看补丁级别?)。
我们如何解决这个错误?有没有一种方法可以强制 Eclipse 中的 JDK 处于特定级别?
更新:我们刚刚尝试将 Eclipse 中的 JDK 合规级别降低到 1.6,我们仍然遇到同样的问题。
OK,谜底揭晓。事实证明我错了;尽管服务器上有 Java 1.7 JDK,但有问题的 WAS ND 服务器实际上使用的是 Java 1.6。一旦我们更改了项目中的 JDK 合规级别(根据我在问题中的第一个 link),.adapter
已成功部署。
我们正在使用安装在 Eclipse Luna 4.4.2 之上的 MobileFirst Platform Studio 7.1(我相信 Eclipse 带有自己的嵌入式 Java 编译器 - according to the Workspace properties, the "Compiler Compliance Level" 设置为 1.7)。
当我们构建 .adapter
文件,然后通过解压缩将其拆开并使用 file myadapter.adapter
检查其中一个 .class
文件的版本时,它显示 myadapter.adapter: compiled Java class data, version 51.0
, which corresponds to Java Platform 7 (1.7).
但是,当我们将它部署到我们的独立 MobileFirst 平台服务器时,运行 在 WAS ND 之上,我们在 MobileFirst 管理控制台和 WAS SystemOut.log 中都遇到错误:
[11/3/15 11:56:07:166 UTC] 0000009b StatusMessage E StatusMessage createStatusMessage Preparation to deploy adapter 'MyAdapter' failed.
java.lang.Error: The adapter was built with a later version of Java than is used to run the server.
at com.worklight.adapters.rest.ParentLastClassLoader.defineClass(ParentLastClassLoader.java:274)
at com.worklight.adapters.rest.ParentLastClassLoader.defineClassFromURL(ParentLastClassLoader.java:233)
at com.worklight.adapters.rest.ParentLastClassLoader.internalFindClass(ParentLastClassLoader.java:215)
at com.worklight.adapters.rest.ParentLastClassLoader.loadClass(ParentLastClassLoader.java:128)
服务器上的Java等级也是1.7,如图java -version
:
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (rhel-2.3.4.1.el6_3-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
我不认为这个错误是正确的,除非验证 JDK 级别的方式有一些微妙之处(也许它也在查看补丁级别?)。
我们如何解决这个错误?有没有一种方法可以强制 Eclipse 中的 JDK 处于特定级别?
更新:我们刚刚尝试将 Eclipse 中的 JDK 合规级别降低到 1.6,我们仍然遇到同样的问题。
OK,谜底揭晓。事实证明我错了;尽管服务器上有 Java 1.7 JDK,但有问题的 WAS ND 服务器实际上使用的是 Java 1.6。一旦我们更改了项目中的 JDK 合规级别(根据我在问题中的第一个 link),.adapter
已成功部署。