diff --git a/CHANGELOG.md b/CHANGELOG.md index 18d1c1503..e2a967e51 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ * 【core 】 修复FileTypeUtil判断wav后缀的录音文件类型不能匹配问题(pr#2834@Github) * 【core 】 修复FileUtil的rename在newName与原文件夹名称一样时,文件夹会被删除问题(issue#2845@Github) * 【core 】 修复IoUtil.readBytes使用SocketInputStream读取不完整问题(issue#I6AT49@Gitee) +* 【core 】 修复ClassScanner自定义classload无效问题(issue#I68TV2@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java index 49b7d90ec..8b482e7c4 100755 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java @@ -7,6 +7,7 @@ import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.lang.Filter; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.ClassLoaderUtil; +import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.URLUtil; @@ -173,10 +174,28 @@ public class ResourceUtil { * @since 4.1.5 */ public static EnumerationIter getResourceIter(String resource) { + return getResourceIter(resource, null); + } + + /** + * 获取指定路径下的资源Iterator
+ * 路径格式必须为目录格式,用/分隔,例如: + * + *
+	 * config/a
+	 * spring/xml
+	 * 
+ * + * @param resource 资源路径 + * @param classLoader {@link ClassLoader} + * @return 资源列表 + * @since 4.1.5 + */ + public static EnumerationIter getResourceIter(String resource, ClassLoader classLoader) { final Enumeration resources; try { - resources = ClassLoaderUtil.getClassLoader().getResources(resource); - } catch (IOException e) { + resources = ObjUtil.defaultIfNull(classLoader, ClassLoaderUtil::getClassLoader).getResources(resource); + } catch (final IOException e) { throw new IORuntimeException(e); } return new EnumerationIter<>(resources); diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/ClassScanner.java b/hutool-core/src/main/java/cn/hutool/core/lang/ClassScanner.java index 8642d2a08..13a926702 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/ClassScanner.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/ClassScanner.java @@ -255,7 +255,7 @@ public class ClassScanner implements Serializable { this.classes.clear(); this.classesOfLoadError.clear(); - for (URL url : ResourceUtil.getResourceIter(this.packagePath)) { + for (URL url : ResourceUtil.getResourceIter(this.packagePath, this.classLoader)) { switch (url.getProtocol()) { case "file": scanFile(new File(URLUtil.decode(url.getFile(), this.charset.name())), null);