jdk版本冲突Unsupported major.minor version错误定位

简介: java中编译代码时,如果因jdk版本不同,可能导致编译失败,下面我提供一个我解决此类问题的思路供大家参考

jdk版本冲突会提示如Unsupported major.minor version 52.0这种错误,不同的jdk版本会有对应的数字提示,52.0对应jdk1.8,51对应jdk1.7,以此类推。
这个错误主要产生的原因有两类:

  1. 一类是使用了高版本的jdk语法写的代码,使用低版本来编译;
  2. 使用maven、ant这类编译工具的版本较低,环境中设置的jdk版本过高;

举个之前遇到过的例子

背景说明:

使用ant进行编译,ant脚本配置的jdk版本为1.6,用户环境变量为jdk1.6

代码编译报错:Unsupported major.minor version 52.0

定位步骤:

  1. 检查jdk环境变量,发现版本正常
  1. 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。
相关文章
|
3月前
|
Java Linux 开发工具
Jenv 多版本JDK管理
Jenv 可以对多版本JDK进行管理
|
4月前
|
Web App开发 Java Linux
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
116 0
|
4月前
|
存储 Java 编译器
JVM-不同jdk版本静态变量存储位置
JVM-不同jdk版本静态变量存储位置
|
3月前
|
Oracle JavaScript Java
JDK的版本迭代特性(JDK9 - JDK20)
JDK的版本迭代特性(JDK9 - JDK20)
|
2月前
|
Oracle Java 编译器
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
46 1
|
2天前
|
Oracle Java 关系型数据库
Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
Oracle Java SE 支持路线图显示,JDK 8(LTS)支持至2030年,非LTS版本如9-11每6个月发布且支持有限。JDK 11(LTS)支持至2032年,而JDK 17及以上版本现在提供免费商用许可。LTS版本提供长达8年的支持,每2年发布一次。Oracle JDK与OpenJDK有多个社区和公司构建版本,如Adoptium、Amazon Corretto和Azul Zulu,它们在许可证、商业支持和更新方面有所不同。个人选择JDK时,可考虑稳定性、LTS、第三方兼容性和提供商支持。
6 0
|
4月前
|
Java Maven
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
133 0
|
29天前
|
Java 应用服务中间件 nginx
idea打war包时,JDK版本的问题解决方式
idea打war包时,JDK版本的问题解决方式
13 0
|
1月前
|
Java
916.【Java】javap 查看 class 文件的jdk编译版本
916.【Java】javap 查看 class 文件的jdk编译版本
46 2
|
1月前
|
Oracle 安全 Java
JDK收费的各个版本(记录一下)
JDK收费的各个版本(记录一下)
237 0