Ant编译提示“Unsupported major.minor version 52.0”

  今天在使用Ant编译build.xml文件时报错"java.lang.UnsupportedClassVersionError:com/sun/tools/javac/Main : Unsupported major.minor version 51.0",很明显是JDK版本不一致所导致的,但是我用的JDK8,Eclipse配置貌似也都正常(Windows——Preferences——Java——Compiler(配置的为1.8)——Installed JREs(勾选的是JDK1.8的安装路径)),再看Ant——Runtime——Classpath(tab项)——Global Entries(此处的tools.jar也是位于JDK1.8安装路径下的lib目录中的tools.jar)。实在找不到原因,就去谷歌搜索,终于把问题解决了,先记录如下:

原因分析

  我们知道Java是支持向后编译的,也就是说,在低版本(如JDK6)上编译的class文件或者jar文件可以在高版本上(如JDK8)上编译通过,但这并不意味着在JDK7上编译的class文件就可以在JDK5上顺利通过编译。为什么?因为高版本通常有很多低版本不支持的新特性。想想看,你能够在JDK5上编译含有lambda表达式或者Stream API的代码吗?当然不行。即便你没有使用那些低版本不支持的新特性,每个class文件都有一个major或者minor版本号,这是存在于Java编译器中的,并且和JDK的版本号是对应的,下面我们列出对应JRE的major版本号:

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

我们可以发现Java8的major版本号是52,这就意味着如果你使用JDK8执行javac命令,将会默认生成一个major版本号为52的class文件,如果你使用JDK7运行这个class文件,你就会收到"Unsupported major.minor version 52.0"。

解决方案

  除了本博文一开始必须要做的几处检查外,还有一处我们必须考虑,右键build.xml文件,Run As——External Tools Configurations,打开JRE选项卡,在Separate JRE选项中必须选择和你编译版本一致的JDK版本(本人就出错在这个地方了)。

参考

http://stackoverflow.com/questions/7073485/why-is-ant-giving-me-a-unsupported-major-minor-version-error

时间: 2024-10-11 12:43:55

Ant编译提示“Unsupported major.minor version 52.0”的相关文章

eclipse 和 android studio 编译时报 Unsupported major.minor version 52.0错解决办法

version 52.0 是java8的环境.当gradle tools 升级到2.2.1时候,可能编译时候会报该错误. 很多网友说更改java version,但是很多时候无效.下面是我遇到时候的解决办法: 解决思路如下: 1.Android studio 中: 出现该问题的情况,大多数是在升级完 gradle tools 2.2.1,把android studio升级到最新2.2版本时候遇到的. 原因是,没有同步更新Android SDK Build-tools.把SDK的build-too

Unsupported major.minor version 52.0

首先要确定linux机器的jdk版本,用高版本jdk打的jar包无法在低版本的linux环境上运行,如果运行时提示 Unsupported major.minor version 52.0,就是因为版本问题导致的,但需要看看这个提示前是哪个包的版本不对 源文档 <http://blog.sina.com.cn/s/blog_64ecfc2f0102uxu6.html> 如linux机器上的JDK版本为1.7,那么打包的时候也要用1.7的版本去打包: 如果依赖的包用的JDK1.8编译的话,而li

ERROR Review:Unsupported major.minor version 52.0

最近将AS从2.1.2升级至2.2版本后,项目编译报出了如下错误: java.lang.UnsupportedClassVersionError: com/android/build/gradle/LibraryPlugin : Unsupported major.minor version 52.0 经过查找发现,AS升级到2.2以后,其内置的jdk版本也同时升级到了jdk1.8,AS则会在项目Setting中提示建议你使用其内置的jdk版本: 当你勾选了下图中Use embedded JDK

如何解决Eclipse开发android程序的编译错误:com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0?

近日,升级了android的开发工具,发现它在Eclipse上运行程序的时候报如下的错误: Errors occurred during the build.   Errors running builder 'Android Package Builder' on project 'EX04_03'.   com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0 原因:个人电脑上装的JDK是1.7 解决办法

异常:Unsupported major.minor version 52.0 (Use --stacktrace to see the full trace)

异常:Unsupported major.minor version 52.0 (Use --stacktrace to see the full trace) 正在写一个功能,更新了同事提交的代码之后,出现了如下错误: 1 Fatal error during compilation org.apache.tools.ant.BuildException: java.lang.UnsupportedClassVersionError: org/elasticsearch/index/query

Unsupported major.minor version 52.0 error

http://blog.csdn.net/pipisorry/article/details/42965435 运行Stanford Parser demo时出现错误: Unsupported major.minor version 52.0 error 出现问题原因: JDK的问题:在eclipse中开发的项目有个java build path中可以配置的jdk,还有个java compiler中可以配置compiler level{eclipse>windows>preferences&g

服务器部署项目出现问题:Unsupported major.minor version 52.0

问题描述: 编写一个web 前置服务,使用ant编译项目,将项目部署到服务器上,启动时报此错误:Unsupported major.minor version 52.0 网上给出错误原因是服务器安装的java版本低于项目开发编译使用的java版本. 但是选择与服务器同样版本或者低于服务器版本编译项目,依旧出现此问题.经分析 ant 是使用javac 进行项目编译,没有明确配置使用哪个javac 进行编译, 默认使用环境变量设置的java 版本进行编译. 解决办法: 在build.xml 中配置j

spark提交jar包时出现unsupported major.minor version 52.0错误的解决方案

一.问题: 最近在spark集群上做一个项目,打包提交jar包时,出现了unsupported major.minor version 52.0的报错,而在local模式运行却能正常运行! 二.错误原因: 查阅诸多资料得出的结论就是:项目编译得到的class文件的版本高于运行环境中jre的版本号,高版本JDK编译的class不能在低版本的jvm虚拟机下运行,否则就会报这类错,因此无法运行!49,50,51,52是Java编译器内部的版本号,版本对应信息如下: Unsupported major.

MyEclipse 下 Unsupported major.minor version 52.0 报错

在Myeclipse2014 下做个一次测试jdbc数据库的代码如下: import java.sql.*; public class sqlTest { public static void main(String[] srg) throws ClassNotFoundException { Connection con; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); try { con=DriverMa