今天在使用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  = ,
Java SE = ,
Java SE 6.0 = ,
Java SE 5.0 = ,
JDK 1.4 = ,
JDK 1.3 = ,
JDK 1.2 = ,
JDK 1.1 =

我们可以发现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

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

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

    version 52.0 是java8的环境.当gradle tools 升级到2.2.1时候,可能编译时候会报该错误. 很多网友说更改java version,但是很多时候无效.下面是我遇到时候的解 ...

  2. ERROR Review:Unsupported major.minor version 52.0

    最近将AS从2.1.2升级至2.2版本后,项目编译报出了如下错误: java.lang.UnsupportedClassVersionError: com/android/build/gradle/L ...

  3. linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)

    最近在做一个dcos(数据中心操作系统)的东西,需要用marathon来做进程管理.遗憾的是0.6版本的marathon在API方面很是缺少,换成了0.15版本之后,运行时提示“Unsupported ...

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

    问题描述: 编写一个web 前置服务,使用ant编译项目,将项目部署到服务器上,启动时报此错误:Unsupported major.minor version 52.0 网上给出错误原因是服务器安装的 ...

  5. Unsupported major.minor version 52.0错误和 jdbc odbc

    什么是JDBC? JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库.JDBC也是jav ...

  6. Unsupported major.minor version 52.0问题的解决

    下载Tomcat9.0,解压后安装运行,结果启动失败,进入logs文件夹看里面的日志文件,提示是Unsupported major.minor version 52.0错误,这是因为Tomcat版本过 ...

  7. 开发错误日记 12: Unsupported major.minor version 52.0

    开发错误日记 12: Unsupported major.minor version 52.0 在编译时出现如下错误: java.lang.UnsupportedClassVersionError: ...

  8. Unsupported major.minor version 52.0 处理方式

    Exception in thread "main" java.lang.UnsupportedClassVersionError: com/globalroam/openstac ...

  9. Java报错--Unsupported major.minor version 52.0

    遇到一个Java相关的报错: ... java.lang.UnsupportedClassVersionError: ... : Unsupported major.minor version 52. ...

随机推荐

  1. ps基础知识

    一 1. ps常用快捷键:ctrl+d 结束选区    ctrl+alt+z  返回          ctrl+z 撤销           ctrl+x 剪切 ctrl+t 编辑图片    ctr ...

  2. Spark Streaming中动态Batch Size实现初探

    本期内容 : BatchDuration与 Process Time 动态Batch Size Spark Streaming中有很多算子,是否每一个算子都是预期中的类似线性规律的时间消耗呢? 例如: ...

  3. CodeSmith7代码生成器针对PostgreSQL数据库无法使用的Bug修复全过程

    前言 最近公司需要将原来使用的MSSQL数据库整体迁移至pgsql,需要使用CodeSmith生成IBatisNet的配置文件.按照提示安装了Npgsql.dll后依然无法使用.引发了本次通过反编译修 ...

  4. 冲刺一 (Day 2)

    冲刺一 (Day 2) 小组讨论结果 经过今天的小组会议,小组各成员决定先进一步探讨项目的需求.因为我们明白要砍倒一棵树,磨刀才是前期的重中重之重,实际中也有不少以为前期需求没做好而,在项目后期推翻重 ...

  5. CSAPP学习笔记(第一,二章)

    1:文本文件指的是ASCII码文件,二进制文件指的是除文本文件以外,其他文件. 2:区分数据对象的唯一判别方法是数据的上下文. 3:描述一下一个hello.c文件的处理过程.首先hello.c文件我们 ...

  6. IP转换hash以及返回

    InetAddress address = InetAddress.getByName("127.0.0.1"); System.out.println(address); int ...

  7. SpringMVC无法获取请求中的参数的问题的调查与解决(2)

    由于Request的getInputSteam()一旦获取一次后,就再也无法获取了 在实际项目中导致下面的问题: 1,多个拦截器,Filter都需要从InputStream中拿数据的情况无法处理: 2 ...

  8. html5+css 图片自适应

    <div style="position:absolute; width:100%; height:100%; z-index:-1; left:0; top:0;"> ...

  9. RHEL7/CentOS7中更改网卡默认名称

    1.重命名并修改网卡配置文件,将"NAME"参数更为我们熟悉的“eth*”,这里我将其改为"eth0" [root@localhost ~]# cd /etc/ ...

  10. poj1050

    To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39081   Accepted: 20639 Desc ...