jdk8升到jdk11报错,com.sun.tools.classfile 不可见,程序包 com.sun.tools.classfile 已在模块 jdk.jdeps 中声明, 但该模块不在模块图中

本文主要是介绍jdk8升到jdk11报错,com.sun.tools.classfile 不可见,程序包 com.sun.tools.classfile 已在模块 jdk.jdeps 中声明, 但该模块不在模块图中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

jdk8升到jdk11报错,java: 程序包 com.sun.tools.classfile 不可见
(程序包 com.sun.tools.classfile 已在模块 jdk.jdeps 中声明, 但该模块不在模块图中)
原因:classfile 在jdk8中tools文件中,jdk11转到了别的包中,导致了不可见

在这里插入图片描述
问题
在原项目中使用jdk8,升级到jdk11,原项目中使用了tools包中classFile类读取className

  public String readClassName(byte[] bytes) throws ConstantPoolException, IOException {DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(bytes));ClassFile read = ClassFile.read(dataInputStream);return read.getName().replaceAll("/", ".");}

在jdk11项目中引入jdk8的tools包后,出现报错
com.sun.tools.attach.spi.AttachProvider: Provider sun.tools.attach.WindowsAttachProvider not found

java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider: Provider sun.tools.attach.WindowsAttachProvider not foundat java.base/java.util.ServiceLoader.fail(ServiceLoader.java:589)at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1212)at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1221)at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1265)at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1300)at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1385)at jdk.attach/com.sun.tools.attach.spi.AttachProvider.providers(AttachProvider.java:258)at jdk.attach/com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:200)

解决方案:不用这个包读取class文件,可以引入asm包二进制读取文件。

<dependency><groupId>asm</groupId><artifactId>asm</artifactId><version>2.2.3</version>
</dependency>

asm根据二进制文件读取className

public String readClassName(byte[] bytes) throws Exception {return new ClassReader(bytes).getClassName().replace("/",".");}

这篇关于jdk8升到jdk11报错,com.sun.tools.classfile 不可见,程序包 com.sun.tools.classfile 已在模块 jdk.jdeps 中声明, 但该模块不在模块图中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748408

相关文章

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python