jdk版本冲突会提示如Unsupported major.minor version 52.0
这种错误,不同的jdk版本会有对应的数字提示,52.0对应jdk1.8,51对应jdk1.7,以此类推。
这个错误主要产生的原因有两类:
- 一类是使用了高版本的jdk语法写的代码,使用低版本来编译;
- 使用maven、ant这类编译工具的版本较低,环境中设置的jdk版本过高;
举个之前遇到过的例子
背景说明:
使用ant进行编译,ant脚本配置的jdk版本为1.6,用户环境变量为jdk1.6
代码编译报错:Unsupported major.minor version 52.0
定位步骤:
- 检查jdk环境变量,发现版本正常
-
version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)2. 检查ant脚本配置,发现配置的也是jdk1.6,没问题,继续跟踪 3. 检查ant工具依赖的jdk配置,因为前面的步骤都正常,我分析很可能是工具依赖的jdk与配置的jdk不是同一版本
JAVA_HOME=
cygpath --$format "$JAVA_HOME"
到了这里,发现配置直接依赖的$JAVA_HOME,顺手一个
deploy@VM000002002 ~ $ vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH果然如此,居然是一个新安装的jdk1.8被配置到全局环境变量里了,接下来去用户环境变量里做一下验证
deploy@VM000002002 ~ $ vim .bash_profile
# .bash_profile
export JAVA_HOME=${HOME}/support/jdk到此原因找到,ant编译依赖的jdk指向了全局的系统变量jdk1.8,但是ant本身的版本较低,无法支持这个高版本的jdk。