不支持的类版本错误: 在WebSphere AS 7中JVMCFRE003有一个错误的主要版本

43
我遇到了这个错误:
java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=map/CareMonths, offset=6
我的 Eclipse Java 编译器设置为 1.6,已安装在 C:\Program Files 的 Java SDK 也是 1.6.0,但是当我将我的应用程序安装到 Webshere Application Server V7 时,仍会出现此错误。 offset=6 是什么意思?我想使用 Java 6 进行编译,而 Websphere 7 支持 Java 6。
我发现 IBM 目录中服务器安装的 JDK 是 Java 7。这是导致错误的原因吗?但是我的工作区的 Eclipse 编译器设置为 Java 1.6。
12个回答

34

WebSphere Application Server V7支持Java平台标准版(Java SE)6(请参见网络部署(所有操作系统),版本7.0信息中心中的规格和API文档),自从发布V8.5支持Java 7以来

我找不到Java 6 SDK文档,只能在Java 7 Windows文档中查看IBM JVM消息。不幸的是,我也没有在文档中找到错误消息。

由于java.lang.UnsupportedClassVersionError是"当Java虚拟机尝试读取一个类文件并确定文件中的主要和次要版本号不受支持时抛出",所以您遇到了使用比运行时环境(即WebSphere应用服务器7.0)支持的更高版本的Java构建应用程序的问题。

我可能错了,但我认为消息中的偏移量=6是为了让您知道哪个位置导致了不兼容性问题。对于您、对于我和许多其他人来说,这是无关紧要的,但是一些人可能会发现它有用,特别是当他们自己生成字节码时。

运行versionInfo命令以了解WebSphere应用程序服务器V7的已安装功能,例如:

C:\IBM\WebSphere\AppServer>.\bin\versionInfo.bat
WVER0010I: Copyright (c) IBM Corporation 2002, 2005, 2008; All rights reserved.
WVER0012I: VersionInfo reporter version 1.15.1.47, dated 10/18/11

--------------------------------------------------------------------------------
IBM WebSphere Product Installation Status Report
--------------------------------------------------------------------------------

Report at date and time February 19, 2013 8:07:20 AM EST

Installation
--------------------------------------------------------------------------------
Product Directory        C:\IBM\WebSphere\AppServer
Version Directory        C:\IBM\WebSphere\AppServer\properties\version
DTD Directory            C:\IBM\WebSphere\AppServer\properties\version\dtd
Log Directory            C:\ProgramData\IBM\Installation Manager\logs

Product List
--------------------------------------------------------------------------------
BPMPC                    installed
ND                       installed
WBM                      installed

Installed Product
--------------------------------------------------------------------------------
Name                  IBM Business Process Manager Advanced V8.0
Version               8.0.1.0
ID                    BPMPC
Build Level           20121102-1733
Build Date            11/2/12
Package               com.ibm.bpm.ADV.V80_8.0.1000.20121102_2136
Architecture          x86-64 (64 bit)
Installed Features    Non-production
                      Business Process Manager Advanced - Client (always installed)
Optional Languages    German
                      Russian
                      Korean
                      Brazilian Portuguese
                      Italian
                      French
                      Hungarian
                      Simplified Chinese
                      Spanish
                      Czech
                      Traditional Chinese
                      Japanese
                      Polish
                      Romanian

Installed Product
--------------------------------------------------------------------------------
Name                  IBM WebSphere Application Server Network Deployment
Version               8.0.0.5
ID                    ND
Build Level           cf051243.01
Build Date            10/22/12
Package               com.ibm.websphere.ND.v80_8.0.5.20121022_1902
Architecture          x86-64 (64 bit)
Installed Features    IBM 64-bit SDK for Java, Version 6
                      EJBDeploy tool for pre-EJB 3.0 modules
                      Embeddable EJB container
                      Sample applications
                      Stand-alone thin clients and resource adapters
Optional Languages    German
                      Russian
                      Korean
                      Brazilian Portuguese
                      Italian
                      French
                      Hungarian
                      Simplified Chinese
                      Spanish
                      Czech
                      Traditional Chinese
                      Japanese
                      Polish
                      Romanian

Installed Product
--------------------------------------------------------------------------------
Name                  IBM Business Monitor
Version               8.0.1.0
ID                    WBM
Build Level           20121102-1733
Build Date            11/2/12
Package               com.ibm.websphere.MON.V80_8.0.1000.20121102_2222
Architecture          x86-64 (64 bit)
Optional Languages    German
                      Russian
                      Korean
                      Brazilian Portuguese
                      Italian
                      French
                      Hungarian
                      Simplified Chinese
                      Spanish
                      Czech
                      Traditional Chinese
                      Japanese
                      Polish
                      Romanian

--------------------------------------------------------------------------------
End Installation Status Report
--------------------------------------------------------------------------------

1
嗨,我有同样的问题,但我不知道如何解决。你能直接回答这个问题吗? - Himanshu
1
我正在使用WebSphere 8.5,其中WebSphere使用1.6内部版本,而我的Eclipse编译器是1.7。 - Himanshu
6
如果您使用Java 7编译器并针对Java 6环境,则需要设置更高版本的编译器以生成符合1.6标准的字节码。请查看javac-source-target选项。 - Jacek Laskowski

9
在这个Eclipse偏好设置面板中,您可以将编译器兼容性从1.7更改为1.6。这解决了我遇到的类似消息。 对于Eclipse来说,在:首选项 -> Java -> 编译器下可以进行设置:'编译器兼容性级别'。

8

您还需要确保已设置适当的项目Facets Java版本。 模块属性 -> 项目Facets -> 应该勾选Java 1.6


7

如果您的项目使用JDK 1.6编译,而您的依赖项是使用Java 7编译的,则可能会出现此错误。


2
没错。这通常发生在 Maven 项目中。 - Kris

5
我在websphere 8.5中出现了以下错误:
java.lang.UnsupportedClassVersionError: JVMCFRE003 重大版本不支持;class=com/xxx/Whatever,偏移量为6
我在eclipse中将项目JDK级别设置为1.7,而was8默认运行在JDK 1.6上,所以发生了冲突。我必须在websphere服务器上安装可选的SDK 1.7,然后问题就解决了。我想我也可以在eclipse中将我的项目级别降到1.6,但我希望代码是1.7的。

2

我之前也遇到了同样的错误。在我的Java项目的Project Facets中,Java编译级别设置为1.7,而WebSphere Application Server v7.0的运行时组合是JRE v1.6;将Project Facets中的Java编译级别设置为1.6即可消除此错误。但我不需要改变编译器兼容级别,它仍然是1.7。希望这能有所帮助!


2

即使我做了上述更改,仍然遇到相同的错误。我的解决方法是:

右键单击项目->属性->Java编译器->编译器兼容性级别->将其更改为1.6。

这个更改是针对该项目的。希望这样就可以解决问题。


1
如果您使用Maven,请尝试在pom.xml中添加以下内容。
<properties>
    ...
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    ...
</properties>

否则尝试更改编译器版本。

1

首先,您需要检查编译有问题的.class文件的主要版本号,在您的情况下是map/CareMonths。请参见this answer了解如何执行此操作。

WAS7使用Java 6(如Jacek所述),而Java 6使用主要版本50,因此您必须使用Java 6编译您的项目。如何设置正确的Java编译器版本取决于您的IDE(例如Eclipse、IntelliJ)或构建工具(例如Maven、Ant)。


1
如果日志显示java.lang.UnsupportedClassVersionError: JVM**** bad major version.,则代码和服务器未使用相同的JDK版本。
要解决此问题,请在代码或服务器JDK中切换JDK版本。
尝试以下操作:- 在下面的用例中,我切换到1.7_64(JDK 1.7 64位)
c:\IBM\WebSphere\WSRR\v8.5\bin\managesdk.bat -enableProfile -profileName WSRRSrv01 -sdkname 1.7_64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接