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

相关文章

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp