fix code and add test

This commit is contained in:
Looly 2023-10-26 22:58:41 +08:00
parent 2c9c52b1b9
commit b7746fb230
3 changed files with 37 additions and 7 deletions

View File

@ -14,6 +14,7 @@ package org.dromara.hutool.core.classloader;
import org.dromara.hutool.core.exception.HutoolException; import org.dromara.hutool.core.exception.HutoolException;
import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil; import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.net.url.UrlUtil; import org.dromara.hutool.core.net.url.UrlUtil;
import org.dromara.hutool.core.reflect.method.MethodUtil; import org.dromara.hutool.core.reflect.method.MethodUtil;
@ -125,10 +126,9 @@ public class JarClassLoader extends URLClassLoader {
* @param jarFileOrDir jar文件或者jar文件所在目录 * @param jarFileOrDir jar文件或者jar文件所在目录
* @return this * @return this
*/ */
@SuppressWarnings("resource")
public JarClassLoader addJar(final File jarFileOrDir) { public JarClassLoader addJar(final File jarFileOrDir) {
if (isJarFile(jarFileOrDir)) { // loopJar方法中如果传入的是jar文件直接返回此文件
return addURL(jarFileOrDir);
}
final List<File> jars = loopJar(jarFileOrDir); final List<File> jars = loopJar(jarFileOrDir);
for (final File jar : jars) { for (final File jar : jars) {
addURL(jar); addURL(jar);
@ -174,10 +174,8 @@ public class JarClassLoader extends URLClassLoader {
* @since 4.4.2 * @since 4.4.2
*/ */
private static boolean isJarFile(final File file) { private static boolean isJarFile(final File file) {
if (!FileUtil.isFile(file)) { return FileUtil.isFile(file) &&
return false; FileNameUtil.isType(file.getName(), FileNameUtil.EXT_JAR);
}
return file.getPath().toLowerCase().endsWith(".jar");
} }
// ------------------------------------------------------------------- Private method end // ------------------------------------------------------------------- Private method end
} }

View File

@ -12,10 +12,21 @@
package org.dromara.hutool.core.classloader; package org.dromara.hutool.core.classloader;
import org.dromara.hutool.core.collection.iter.EnumerationIter;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Console;
import org.dromara.hutool.core.map.Dict; import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.core.reflect.FieldUtil;
import org.dromara.hutool.core.reflect.method.MethodUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
import java.sql.Driver;
import java.sql.DriverManager;
public class ClassLoaderUtilTest { public class ClassLoaderUtilTest {
@Test @Test
@ -61,4 +72,18 @@ public class ClassLoaderUtilTest {
} }
} }
@Test
@Disabled
void loadClassFromJarTest() {
final JarClassLoader classLoader = ClassLoaderUtil.getJarClassLoader(
FileUtil.file("D:\\m2_repo\\com\\sap\\cloud\\db\\jdbc\\ngdbc\\2.18.13\\ngdbc-2.18.13.jar"));
final Class<?> aClass = ClassUtil.forName("com.sap.db.jdbc.Driver", true, classLoader);
final Field instance = FieldUtil.getField(aClass, "INSTANCE");
Console.log(FieldUtil.getFieldValue(null, instance));
final Field version = FieldUtil.getField(aClass, "JAVA_VERSION");
Console.log(FieldUtil.getFieldValue(null, version));
}
} }

View File

@ -292,6 +292,13 @@ public class FileUtilTest {
} }
} }
@Test
@Disabled
public void loopFileTest() {
final List<File> files = FileUtil.loopFiles("D:\\m2_repo\\cglib\\cglib\\3.3.0\\cglib-3.3.0.jar");
Console.log(files);
}
@Test @Test
@Disabled @Disabled
public void loopFilesTest2() { public void loopFilesTest2() {