【发布时间】:2013-04-07 07:15:00
【问题描述】:
我正在尝试将 WAR 文件部署到 GlassFish 服务器。我收到以下错误:
[#|2013-04-06T17:50:56.982-0430|警告|glassfish3.1.2|javax.enterprise.system.container.web.org.glassfish.web.loader|_ThreadID=17;_ThreadName=Thread- 2;|WEB9052: Unable to load class com.tugay.User, reason: java.lang.UnsupportedClassVersionError: WEB9032: Class com.tugay.User has unsupported major or minor version numbers, which are greater than those found in Java Runtime Environment版本 1.6.0_37|#]
为什么它抱怨我的 Java 版本?我在课堂上有一个@Named 注释。 Java 1.6.0_37 不支持这个注解吗?
package com.tugay.user;
import javax.faces.bean.SessionScoped;
import javax.inject.Named;
import java.io.Serializable;
@Named("userBean")
@SessionScoped
public class UserBean implements Serializable {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
【问题讨论】:
-
仔细看错误的包名,就是
java.lang。因此,问题绝对不在 JSF 或 Glassfish 中。它只是在这个包所属的基本 Java SE 中。如果您遇到特定于 JSF 的问题,您将获得javax.faces包的异常。 -
对不起,你在哪里看到包名和异常?这里也不例外?
-
java.lang.UnsupportedClassVersionError。它只是表示当前运行的 JVM 不支持指定类的版本。如果您使用较新版本的 JVM 编译了该类,则可能会发生这种情况,例如Java 1.7 之一。 -
“指定类的版本”是什么意思?
-
这是指虚拟机正在加载的类女巫。您的运行时是
1.6,显然您已经编译了更高版本的1.7,而没有明确指定目标版本。重新编译代码以定位1.6。例如,在 Eclipse 中,您可以使用window > settings > java > compiler > compiler compliance level > 1.6进行设置