From 46ce098add55c9a7f8e6a6c757593b040debfa83 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 30 Oct 2023 17:26:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DClassUtil#scanJar=E6=9C=AA?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E5=85=B3=E9=97=AD=E6=96=87=E4=BB=B6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/core/reflect/ClassScanner.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java index ddb0c4917..6cde0dd38 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java @@ -17,6 +17,7 @@ import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.collection.iter.EnumerationIter; import org.dromara.hutool.core.exception.ExceptionUtil; import org.dromara.hutool.core.io.IORuntimeException; +import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.io.file.FileNameUtil; import org.dromara.hutool.core.io.resource.JarResource; import org.dromara.hutool.core.io.resource.ResourceUtil; @@ -366,22 +367,26 @@ public class ClassScanner implements Serializable { } /** - * 扫描jar包 + * 扫描jar包,扫描结束后关闭jar文件 * * @param jar jar包 */ private void scanJar(final JarFile jar) { - String name; - for (final JarEntry entry : new EnumerationIter<>(jar.entries())) { - name = StrUtil.removePrefix(entry.getName(), StrUtil.SLASH); - if (StrUtil.isEmpty(packagePath) || name.startsWith(this.packagePath)) { - if (name.endsWith(FileNameUtil.EXT_CLASS) && !entry.isDirectory()) { - final String className = name// + try{ + String name; + for (final JarEntry entry : new EnumerationIter<>(jar.entries())) { + name = StrUtil.removePrefix(entry.getName(), StrUtil.SLASH); + if (StrUtil.isEmpty(packagePath) || name.startsWith(this.packagePath)) { + if (name.endsWith(FileNameUtil.EXT_CLASS) && !entry.isDirectory()) { + final String className = name// .substring(0, name.length() - 6)// .replace(CharUtil.SLASH, CharUtil.DOT);// - addIfAccept(loadClass(className)); + addIfAccept(loadClass(className)); + } } } + } finally { + IoUtil.closeQuietly(jar); } }