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

相关文章

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

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

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录