diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java
index c4ca28513..02378c2cf 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java
@@ -13,6 +13,8 @@
package org.dromara.hutool.core.classloader;
import org.dromara.hutool.core.exception.HutoolException;
+import org.dromara.hutool.core.lang.Console;
+import org.dromara.hutool.core.lang.caller.CallerUtil;
import org.dromara.hutool.core.reflect.ClassDescUtil;
import java.io.File;
@@ -27,19 +29,21 @@ import java.io.File;
public class ClassLoaderUtil {
/**
- * 获取{@link ClassLoader}
- * 获取顺序如下:
- *
- *
- * 1、获取当前线程的ContextClassLoader
- * 2、获取当前类对应的ClassLoader
- * 3、获取系统ClassLoader({@link ClassLoader#getSystemClassLoader()})
- *
+ * 获取{@link ClassLoader},获取顺序如下:
+ *
+ * - 获取调用者的ContextClassLoader
+ * - 获取当前线程的ContextClassLoader
+ * - 获取ClassLoaderUtil对应的ClassLoader
+ * - 获取系统ClassLoader({@link ClassLoader#getSystemClassLoader()})
+ *
*
* @return 类加载器
*/
public static ClassLoader getClassLoader() {
- ClassLoader classLoader = getContextClassLoader();
+ ClassLoader classLoader = CallerUtil.getCallerCaller().getClassLoader();
+ if(null == classLoader){
+ classLoader = getContextClassLoader();
+ }
if (classLoader == null) {
classLoader = ClassLoaderUtil.class.getClassLoader();
if (null == classLoader) {
@@ -49,6 +53,16 @@ public class ClassLoaderUtil {
return classLoader;
}
+ /**
+ * 获取调用者的{@link ClassLoader}
+ *
+ * @return {@link ClassLoader}
+ * @since 6.0.0
+ */
+ public static ClassLoader getCallerClassLoader() {
+ return CallerUtil.getCallerCaller().getClassLoader();
+ }
+
/**
* 获取当前线程的{@link ClassLoader}
*
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java
index cc9853a84..0e17d8ba9 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java
@@ -6,6 +6,12 @@ import org.junit.jupiter.api.Test;
public class ClassLoaderUtilTest {
+ @Test
+ void getCallerClassLoaderTest() {
+ final ClassLoader callerClassLoader = ClassLoaderUtil.getCallerClassLoader();
+ Assertions.assertEquals(ClassLoaderUtilTest.class.getClassLoader(), callerClassLoader);
+ }
+
@Test
public void isPresentTest() {
final boolean present = ClassLoaderUtil.isPresent("org.dromara.hutool.core.classloader.ClassLoaderUtil");
diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml
index e623b26fa..dbfaf1436 100755
--- a/hutool-extra/pom.xml
+++ b/hutool-extra/pom.xml
@@ -32,7 +32,7 @@
org.dromara.hutool.extra
2.3
- 3.14.1.RELEASE
+ 3.15.6.RELEASE
1.4.2
2.3.32
4.9.21
@@ -43,7 +43,7 @@
3.5.1
3.9.0
5.1.1
- 2.7.10
+ 2.7.13