首页 > 编程语言 >java.lang.IllegalArgumentException: Unsupported class file major version xx解决之道

java.lang.IllegalArgumentException: Unsupported class file major version xx解决之道

时间:2024-11-21 14:20:42浏览次数:1  
标签:lang major 依赖 java version exclude class

在一次项目打包中遇到了这个问题,这个问题的本质是打包时,你依赖的包或这些依赖的间接依赖中含有高于当前项目构建jdk版本编译出来的类,导致打包失败。

1.major version和jdk各版本对应关系可以自行搜索,当前主要版本的对应关系是

c:55 对应 java 11
major version:52 对应 java 8
major version:51 对应 java 7
major version:50 对应 java 6

jar -xvf解压依赖的jar包,然后对某个class文件执行javap -verbose xxx.class |grep version查看某个类的版本,比如我的项目构建是jdk8,找个某个类A,其major version是55,那基本就确定是因为这个类引起的了。

2.那么关键是怎么定位是哪个依赖包含了这个类呢
我这里使用gradle构建执行shadowJar时,尝试打开了各种debug和trace日志,并未提示具体是处理哪个类过程中报的错,就只能用笨办法,看看构建成功和失败之间的改动是哪些,一个个exclude进行判断(exclude的过程中必须要把间接依赖也考虑进去)。

经过我的一番排查,最终确定是com.fasterxml.jackson.core:jackson-core:2.15.2中的META-INF/versions下的类引起的,打包时exclude这些文件后构建成功!这个依赖其实也是别的包间接引进的,所以排查起来还是比较费劲!

 shadowJar {
        // ...
        // 其余内容省略
        mergeServiceFiles()
        exclude "META-INF/versions/**/*.*"
 }

标签:lang,major,依赖,java,version,exclude,class
From: https://www.cnblogs.com/lshao/p/18560645

相关文章

  • Java初识
    Java概述Java由来Java是由JamesGosling设计的。最初是为了网联化的市场前景而开启的项目计划,起名为Oak,但这个市场并不友好,这个项目就被搁置了;但在1994年,该项目小组看到了浏览器在未来的发展前景,于是决定将OaK应用于万维网,就这样Java诞生了。随着Java的发展,体系越来越完......
  • 【力扣热题100】[Java版] 刷题笔记-234. 回文链表
    题目:234.回文链表给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。解题思路回文定义:是指正读和反读都相同的字符序列。将链表数据获取出来,再通过前后指针向中间遍历,数据一致,则是回文;如果不一致则不是回文。......
  • Java基础面试:关键字与注释
    Java中的关键字什么是关键字Java关键字是Java语言中预先定义好的、具有特殊含义的标识符。这些标识符在程序中有固定的用途,不能用作变量名、方法名或类名。Java中共有53个特殊标识符,其中包括48个关键字,2个保留字,外加3个特殊直接量。关键字分类及说明分类关键......
  • 使用minikube快速搭建一个简单的golang微服务访问
    先在宿主机的docker下载一下golang的最新镜像dockerpullgolang:test写个简单的服务器,监听7878端口,请求都返回hello,worldpackagemainimport("fmt""net/http""os")funcmain(){fmt.Println("startmain")http.HandleFunc(&q......
  • 小白如何进阶 Java 高级工程师
    一、小白进阶之路开启在当今数字化时代,Java作为一种广泛应用的编程语言,掌握它对于个人职业发展至关重要。从小白进阶为Java高级工程师不仅意味着薪资的提升,更是个人技术实力和职业价值的体现。然而,这条进阶之路充满挑战。首先,Java语言本身具有一定的复杂性。它涵盖了众......
  • Java中常用的线程安全单例模式实现
    在Java中,实现线程安全的单例模式有多种方式。以下是几种常用的线程安全单例模式实现:1.饿汉式(线程安全,类加载时初始化)特点:简单且线程安全,但如果实例过于占用资源且程序可能不使用它,会造成内存浪费。publicclassSingleton{privatestaticfinalSingletonINSTANCE......
  • 构建企业级金融数据分析助手:基于 LangChain 的多源数据 RAG 系统实践
    前言随着金融市场的数字化转型不断深入,每天都有海量的金融数据在全球市场中产生。从财报数据到市场新闻,从实时行情到研究报告,这些数据承载着巨大的价值,但同时也给金融从业者带来了前所未有的挑战。如何在这个信息爆炸的时代,快速而准确地从繁杂的数据中获取有价值的洞察?这个......
  • Win10 部署 Langchain-Chatchat 0.3
    项目地址:https://github.com/chatchat-space/Langchain-Chatchat前面装好了Xinference现在开始安装Langchain-Chatchat我们还是要先conda创建个环境condacreate --prefixD:\AI\Chatchat03python=3.11下面激活环境:condaactivateD:\AI\Chatchat03然后安装Langchain-Cha......
  • JavaApi---第一节
    JavaApi高级编程JavaApi什么是JavaApi?JavaApi是一组预先定义好的类和接口,帮助开发者快速开发程序JavaApi就是学会如何使用别人编写的类和接口Api应用程序的接口函数与类的集合实际就是别人写好的类Java中常用的包Java.lang:基础语言包java.util:......
  • java工具类static静态方法读取yml配置
    当我们需要在工具类中获取yml配置的时候,由于变量是staic导致获取不到yml配置因为spring加载静态方法比IOC早,所以不能直接使用@Value注解读取yml配置,读取结果是null。@ComponentpublicclassTestUtil{//使用@Value注解读取yml配置的数据@Value("${test.url}")......