ERJ*_*JAN 1532 java jvm incompatibility unsupported-class-version
我正在尝试使用Notepad ++作为我的一体化工具编辑,运行,编译等.
我安装了JRE,并且已将路径变量设置为.../bin目录.
当我在Notepad ++中运行"Hello world"时,我收到以下消息:
java.lang.UnsupportedClassVersionError: test_hello_world :
Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
.........................................
Run Code Online (Sandbox Code Playgroud)
我认为这里的问题是版本问题; 某些版本的Java可能是旧的或太新的.
.../bin
JRE或JDK中的变量有什么区别?Juh*_*äki 1912
显示的版本号描述了类文件兼容的JRE的版本.
报告的主要数字是:
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
Run Code Online (Sandbox Code Playgroud)
(来源:维基百科)
要解决实际问题,您应该尝试使用较新版本的Java JRE运行Java代码,或者指定Java编译器的目标参数,以指示编译器创建与早期Java版本兼容的代码.
例如,要生成与Java 1.4兼容的类文件,请使用以下命令行:
javac -target 1.4 HelloWorld.java
Run Code Online (Sandbox Code Playgroud)
使用较新版本的Java编译器,您可能会收到有关未设置引导类路径的警告.有关此错误的更多信息,请参阅博客文章New javac warning,以设置没有bootclasspath的旧源.
Viv*_*Ray 358
java.lang.UnsupportedClassVersionError
发生的原因是编译期间JDK较高,运行时期间JDK较低.
Cac*_*sky 115
在Eclipse中,我只是转到菜单命令Window - > Preferences - > Java - > Compiler,然后将"Compiler compliance level"设置为1.6.
ERJ*_*JAN 58
别担心,我解决了.
它实际上很简单 - 您需要使用相同的版本安装BOTH JRE/JDK.
JRE 6 - > JDK 6
JRE 7 - > JDK 7
等等.
Bra*_*rks 43
此错误意味着您正在尝试加载使用比您安装的Java更新版本编译的Java"类"文件.
例如,您的.class
文件可能已经为JDK 7编译,并且您尝试使用JDK 6运行它.
所以解决方案是:
如果您有源,请使用本地Java编译器(如果有的话)重新编译该类.
javac FileName.java
对于开发人员来说,如果另一个开发人员检入.class文件,并且他们有比你更新的java版本,就会发生这种情况!
Ani*_*kur 22
您正在尝试使用不支持编译代码版本的Java版本来运行程序.因此,基本上您必须使用更高版本编译代码并尝试使用较低版本运行它.
随着你的到来
Unsupported major.minor version 51.0
Run Code Online (Sandbox Code Playgroud)
和版本51.0对应于J2SE 7,您最有可能在Java 7中编译代码并尝试使用较低版本运行它.检查java -version
显示的内容.它应该是Java 7版本.如果没有在PATH/JAVA_HOME中进行适当的更改.或者您可以使用与尝试运行代码相同的版本进行编译.如果配置令人困惑,您可以始终提供绝对路径/home/user/jdk1.7.0_11/bin/javac
和/home/user/jdk1.7.0_11/bin/java
.
Ton*_*ony 18
我在Mac上有类似的情况,以下过程对我有用:
在终端中输入
vi ~/.profile
Run Code Online (Sandbox Code Playgroud)
然后在文件中添加此行,并保存
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)
其中版本是您计算机上的版本,例如1.7.0_25
.
退出编辑器,然后键入以下命令使其生效
source ~/.profile
Run Code Online (Sandbox Code Playgroud)
然后键入java -version以检查结果
java -version
Run Code Online (Sandbox Code Playgroud)
什么是.profile
文件?
.profile文件是一个隐藏文件.它是一个可选文件,告诉系统当用户的配置文件登录时要运行哪些命令.例如,如果我的用户名是bruno,并且/ Users/bruno /中有.profile文件,则其所有内容将在登录过程中执行.
资料来源:http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515
And*_* L. 16
在Eclipse的菜单窗口 - > 首选项 - > Java - > 编译器中也检查"配置项目特定设置".
如果您在同一Java版本中出现错误:尝试手动删除项目的构建文件夹.然后重启Eclipse.
ken*_*orb 14
最常见的问题是您的JAVA_HOME
变量配置错误,如果您安装了多个,那么应该指向正确的Java Development Kit库.
要查找SDK Java文件夹的位置,请运行以下命令:
jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
Run Code Online (Sandbox Code Playgroud)
要检查您安装的java(openjdk),请通过以下方式检查:
dpkg -l "openjdk*" | grep ^i
Run Code Online (Sandbox Code Playgroud)
要么:
update-java-alternatives -l
Run Code Online (Sandbox Code Playgroud)
要更改它,请使用:
update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)
sudo
如果需要,带前缀.
选择替代java版本.
或者检查哪些可供安装:
apt-cache search ^openjdk
Run Code Online (Sandbox Code Playgroud)
sudo
如果需要,带前缀.
然后你可以安装,例如:
apt-get install openjdk-7-jre
Run Code Online (Sandbox Code Playgroud)
sudo
如果需要,带前缀.
安装/升级适当的包:
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
Run Code Online (Sandbox Code Playgroud)
该
java-1.7.0-openjdk
软件包仅包含Java Runtime Environment.如果要开发Java程序,请安装该java-1.7.0-openjdk-devel
程序包.
FreeBSD Ports集合中有一个名为openjdk7的OpenJDK 7软件包,可能需要重新配置.
请参阅:OpenJDK维基页面.
只需从Oracle站点安装适当的Java SE Development Kit库或安装即可
如果您遇到Jenkins的这个问题,请参阅:
但是,选择正确版本的Java(较新版本)update-alternatives
应该可行.
Man*_*dit 12
当我使用Ant脚本来构建我的应用程序时,我遇到了同样的问题.
我使用Eclipse进行应用程序开发,并在项目的构建属性中更改了编译器版本.但这对我不起作用.然后我发现我可以在Ant脚本中提供编译器版本.
我在编译Java文件的部分修改了Ant脚本.
<target name="build-java" depends="prepare-build">
<echo message="Compiling java files"/>
<javac ....
target="1.5"...
</javac>
</target>
Run Code Online (Sandbox Code Playgroud)
这对我有用,可以解决不受支持的主要小问题.
小智 12
我在1.7中编写的项目遇到了同样的问题,并试图在1.6中执行.
我在Eclipse中的解决方案:
右键单击Project Properties - > Java Build Path - > Libraries
选择您的JRE系统库,然后单击右侧的编辑,并选择目标JRE.
现在转到左侧的Java Compiler,并将Compiler compliance level更改为您的目标.
这对我有用.
Mac*_*ala 11
正如几个人在其他地方所解释的那样,Java程序运行在Java的旧版本上,而不是编译它的版本.它需要"交叉编译"以实现向后兼容.换句话说,源Java版本和目标Java版本之间存在不匹配.
更改Eclipse菜单中的选项无法回答原始海报,他说他/她没有使用Eclipse.在OpenJDK javac 1.7版本中,如果使用参数-source
,则可以交叉编译为1.6 ,并且在编译时-target
提供目标版本的rt.jar -file(即旧版本).如果您实际安装了1.6 JRE,则可以指向其安装(例如,Ubuntu上的/usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar,/ usr/jdk/jdk1.在SunOS上显然是6.0_60/jre/lib/rt.jar.抱歉,我不知道它在Windows系统中的位置).像这样:
javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java
Run Code Online (Sandbox Code Playgroud)
看起来你可以从互联网上下载rt.jar,然后指向它.这不是太优雅了:
javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
Run Code Online (Sandbox Code Playgroud)
Tha*_*wda 10
如果您在使用Maven时遇到此问题,可以使用插件Maven编译器交叉编译代码.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
.....
Run Code Online (Sandbox Code Playgroud)
更新:设置source
和target
到1.8
,如果你使用的是JDK 8.
Adi*_* Ya 10
基于此......
J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45
Run Code Online (Sandbox Code Playgroud)
在Eclipse中,右键单击package explorer中的项目:
构建路径 - > 配置构建路径
下:
Java构建路径 - > 库 - > 添加库 - > JRE系统库 - > 已安装的JRE - > 搜索.
通过在搜索完成后选择列表中的库来添加所需的JRE.
eth*_*lan 10
如果使用Maven,请设置Java编译级别.打开命令行并编写java -version
编译级别:
如果使用IntelliJ IDEA,请选择项目→ 文件 → 设置 → 构建执行部署 → 编译器 → Java编译器.然后将字节代码更改为1.7,如下图所示:
小智 8
从Eclipse运行Ant时我有相同的错误消息,但这里提到的其他解决方案并没有解决我的问题.有趣的是,从Windows命令行运行Ant运行正常,因此它必须是Eclipse中的配置问题.
事实证明,在Eclipse下,您可以指定Ant应该运行的环境,并将其设置为JRE而不是JDK.
我如何解决它?
此错误意味着用于执行类代码的JRE无法识别所使用的Java版本.通常因为生成类文件(即编译它)的Java版本更新.
要修复它,你也可以
a)使用与运行Java编译器相同或较旧版本的Java编译器编译Java源代码.即安装适当的JDK.
b)使用较新版本的Java编译器编译Java源代码,但是在兼容模式下.即使用-target
参数.
c)在JRE中运行已编译的类,该JRE与用于编译类的JDK相同或更新.
您可以检查当前
javac -version
用于编译器和java -version
运行时的版本.
我应该安装JDK,并将我的PATH变量设置为JDK而不是JRE吗?
对于编译,当然,安装和配置所需的特定JDK.
对于运行时,您可以使用JDK附带的一个或独立的JRE,但无论如何,请确保您已安装了正确的版本并且已配置PATH,这样就不会出现意外情况.
JRE或JDK中的PATH变量有什么区别?
PATH环境变量告诉命令shell在哪里查找您键入的命令.键入时java
,命令shell解释器将PATH
从左到右查看变量中指定的所有位置,以查找java
要运行的相应运行时可执行文件.如果您安装了多个Java版本 - 即您java
在PATH变量中指定的多个位置具有可执行文件,那么从左到右遇到的第一个将是执行的那个.
编译器命令javac
仅在JDK中提供.运行时命令是java
JDK附带的,并且在JRE中.
您可能已经安装了一个版本(51.0 = Java 7)javac
,并且您也安装了相同版本java
,但是之前的另一个版本java
出现在PATH中,因此正在调用而不是您期望的那个版本.
您已使用更高版本的JDK进行编译并尝试从较低版本的JDK/JRE运行.
要检查这一点,请参阅版本信息:
javac -version
java -version
Run Code Online (Sandbox Code Playgroud)
它们将是不同的,javac将具有更高的版本号.
要解决这个问题,请使用JDK版本中的java运行,或者如果您有更新的JRE/JDK也可以运行.
which javac
会告诉你这个位置,例如/usr/bin/javac
.只需直接使用/usr/bin/java <program>
.
或者您可以将环境变量设置为永久解决方案.
今天,我们在Ubuntu 12.04.2 LTS(精确穿山甲)上的Tomcat 7中出现了此错误消息:
/var/log/tomcat7/localhost.2014-04-08.log:Apr8,2014
9:00:55 AM org.apache.catalina.core.StandardContext filterStart
SEVERE:异常启动过滤器struts2
java.lang.UnsupportedClassVersionError:controller/ReqAccept:不支持的major.minor版本51.0(无法加载类controller.ReqAccept)
在Struts的应用程序被编译使用Java 7.
事实证明,有人使用"service tomcat [stop/start]"来重启Tomcat 7,
$ ps -ef | grep java
tomcat7 31783 1 32 20:13?00:00:03/usr/lib/jvm/default-java/bin/java ...
$/usr/lib/jvm/default-java/bin/java -version
java version"1.6.0_27"
这导致"不支持的major.minor版本51.0"错误.
当我们使用"/etc/init.d/tomcat7 [stop/start]"重启Tomcat 7时,问题就解决了.
$ ps -ef | grep java
tomcat7 31886 1 80 20:24?00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$ /usr/local/java/jdk1.7.0_15/bin/java -version
java version"1.7.0_15"
我解决了 我跑了:
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
Run Code Online (Sandbox Code Playgroud)
该错误具有误导性Unsupported major.minor version 51.0
.这给人的印象是不支持版本51(Java 7).我们应该使用Java 6.
该错误应该是:
当前的Java版本50不受支持.使用Java版本7(51:0和更高版本)代替
您的Java文件使用与您尝试运行它的版本(较低的运行时版本)不同的版本(更高的编译器版本)进行编译.
基本的理解是,使用较低版本编译的类应该在更高版本中运行.但相反(使用更高的编译器版本编译并尝试以较低的运行时版本运行它)有时是不可能的.
因此,在尝试执行程序时会显示此错误.不支持的major.minor版本xx
问:我在Java 7中创建了一个应用程序,但是当我的用户尝试运行它时,他们会得到一个不受支持的major.minor版本51.0错误.这意味着什么,我能做些什么呢?
答:如果您在Java 7中使用javac编译应用程序,则生成的类文件将具有51.0版本号.7之前的Java版本无法识别此编号,因此您的用户必须在运行应用程序之前升级到Java 7.如果您不使用任何Java 7 API,则可以尝试使用javac -target 1.6编译应用程序以创建1.6兼容的类文件.如果使用webstart部署应用程序,则可以指定所需的最低版本.有关更多信息,请参阅Java Web Start和JNLP上的文档.一旦我们为当前在桌面上安装Java 6的最终用户触发Java 7自动更新,这个问题就会消失.这个时间表还没有确定,我们希望让开发人员有时间首先解决他们的代码和JDK 7之间的任何问题.
(来源:oracle.com.)
哦Mac OS XI能够通过设置JAVA_HOME变量来解决这个问题:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1823728 次 |
最近记录: |