dromara / hutool

🍬A set of tools that keep Java sweet.
https://hutool.cn
Other
29.25k stars 7.54k forks source link

JDK21环境下,使用ClassUtil.loadClass方法出现有个别class无法找到的问题 #3780

Closed LettyBoy closed 3 weeks ago

LettyBoy commented 3 weeks ago

版本情况

JDK版本: jdk21 hutool版本: 5.8.31

问题描述(包括截图)

  1. 复现代码
ClassUtil.loadClass(mapperName)
  1. 堆栈信息 image
looly commented 3 weeks ago

使用JDK的Class.forName试下。

盲猜几个原因:

  1. 使用了自定义的ClassLoader,和当前上下文的不一致
  2. 多模块,没有加载。

补充后再打开此issue。

LettyBoy commented 3 weeks ago

同一个模块下,只有这一个类不能被发现,而且换成java自带的class.forName后,是成功的

looly commented 3 weeks ago

@LettyBoy 那可能还是ClassLoader的问题。

尝试:

Class.forName("xxxxx", true, ClassLoaderUtil.getClassLoader());

本质上是调用的这个方法。

Class.forName使用ClassLoader.getClassLoader(caller),使用调用者的ClassLoader,你可以打印对比下这两者是否有区别。

LettyBoy commented 3 weeks ago

我发现只是在生产环境出现这个问题,idea开发环境下,是正常的

looly commented 3 weeks ago

@LettyBoy 那就可能是ClassLoader的问题了。