如何修复java.lang.UnsupportedClassVersionError:不支持的主版本。次版本
我正在尝试使用编辑、运行、编译等一体化工具 我已经安装,并且我已经将路径变量设置到如何修复java.lang.UnsupportedClassVersionError:不支持的主版本。次版本,java,jvm,incompatibility,unsupported-class-version,Java,Jvm,Incompatibility,Unsupported Class Version,我正在尝试使用编辑、运行、编译等一体化工具 我已经安装,并且我已经将路径变量设置到../bin目录 在记事本++中运行“Hello world”时,我收到以下消息: java.lang.UnsupportedClassVersionError:test\u hello\u world: 不支持的major.minor版本51.0 位于java.lang.ClassLoader.defineClass1(本机方法) 位于java.lang.ClassLoader.DefineClassSecond
../bin
目录
在记事本++中运行“Hello world”时,我收到以下消息:
java.lang.UnsupportedClassVersionError:test\u hello\u world:
不支持的major.minor版本51.0
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.DefineClassSecond(未知源)
.........................................
我认为这里的问题在于版本;Java的某些版本可能是旧的或太新的
PATH
变量之间有什么区别别担心,我已经解决了 它实际上很简单——您需要用相同的版本安装两个JRE/JDK JRE 6->JDK 6 JRE 7->JDK 7
等等。java.lang.UnsupportedClassVersionError发生的原因是编译时JDK较高,运行时JDK较低。显示的版本号描述了类文件兼容的JRE版本 报告的主要数字如下:
JavaSE17=61,
Java SE 16=60,
Java SE 15=59,
Java SE 14=58,
Java SE 13=57,
Java SE 12=56,
Java SE 11=55,
Java SE 10=54,
JavaSE9=53,
Java SE 8=52,
JavaSE7=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
(来源:)
要解决实际问题,您应该尝试使用较新版本的Java JRE运行Java代码,或者为Java编译器指定目标参数,以指示编译器创建与早期Java版本兼容的代码
例如,要生成与Java 1.4兼容的类文件,请使用以下命令行:
javac-target1.4helloworld.java
对于较新版本的Java编译器,您可能会收到一条关于未设置引导类路径的警告。有关此错误的详细信息,请参阅博客文章。此错误意味着您试图加载一个Java“类”文件,该文件是用比您安装的Java版本更新的Java编译的 例如,您的
.class
文件可能是为JDK 7编译的,您正在尝试使用JDK 6运行它
因此,解决方案是:
- 升级Java运行时或
- 如果有源代码,请使用本地Java编译器(如果有)重新编译该类 javac FileName.java
对于开发人员来说,如果其他开发人员签入.class文件,并且他们拥有比您更新的java版本,则可能会发生这种情况 在Eclipse中,我只需进入菜单命令窗口->首选项->Java->编译器,然后将“Compiler compliance level”设置为1.6。您可以使用Java 7编译一些JAR库,而Java运行时只有Java 6。这可能发生在一些新的库中。在Eclipse的菜单窗口->首选项->Java->编译器中,同时检查“配置特定于项目的设置”
如果在相同的Java版本中仍然存在错误:请尝试手动删除项目的生成文件夹。然后重新启动Eclipse。正如一些人在其他地方回答的那样,Java程序运行在一个比它编译时使用的旧版本的Java上。为了向后兼容,它需要“交叉编译”。换句话说,源和目标Java版本之间存在不匹配 更改Eclipse菜单中的选项并不符合最初的海报,海报上的人说他/她没有使用Eclipse。在OpenJDK javac 1.7版上,如果使用参数
-source
和-target
,并在编译时提供目标版本(即旧版本)的rt.jar文件,则可以对1.6进行交叉编译。如果你真的安装了1.6JRE,你可以指向它的安装(例如,Ubuntu上的/usr/lib/jvm/java-6-openjdk-i386/JRE/lib/rt.jar,SunOS上的/usr/jdk/jdk1.6.060/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
看起来您可以从Internet下载rt.jar,然后指向它。但这并不太优雅:
javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
您正在尝试使用不支持代码编译版本的Java版本运行程序因此,基本上您必须使用较高版本编译代码,并尝试使用较低版本运行它。 当你越来越
Unsupported major.minor version 51.0
而版本51.0对应于J2SE 7您很可能已经用Java 7编译了代码,并试图使用较低版本运行它。检查
java-version
显示的内容。它应该是Java7版本。如果没有,请在路径/JAVA_HOME中进行适当的更改。或者,您可以使用尝试运行代码的相同版本进行编译。如果配置混乱,您总是可以给出绝对路径/home/user/jdk1.7.0_11/bin/javac
和/home/user/jdk1.7.0_11/bin/java
我在使用脚本构建应用程序时也遇到过同样的问题
我在应用程序开发中使用,并在项目的构建属性中更改了编译器版本。但这对我不起作用。然后我发现我可以在Ant脚本中提供编译器版本
我在编译Java文件的部分修改了Ant脚本
<target name="build-java" depends="prepare-build">
<echo message="Compiling java files"/>
<javac ....
target="1.5"...
</javac>
</target>
当我安装1.7时,问题得到了解决。我在Mac上遇到了类似的情况,下面的过程对我很有效:
在终端中,键入
vi ~/.profile
然后在文件中添加这一行,并保存
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home
然后键入java-version检查结果
java -version
什么是.profile
文件
.profile文件是一个隐藏文件
java -version
<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>
.....
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
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
javac -version
java -version
jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
dpkg -l "openjdk*" | grep ^i
update-java-alternatives -l
update-alternatives --config java
apt-cache search ^openjdk
apt-get install openjdk-7-jre
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home