mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-07 22:27:59 +08:00
fix code
This commit is contained in:
parent
153fb00e56
commit
1b7269187a
@ -72,6 +72,14 @@ public class ClassScanner implements Serializable {
|
|||||||
* 扫描结果集
|
* 扫描结果集
|
||||||
*/
|
*/
|
||||||
private final Set<Class<?>> classes = new HashSet<>();
|
private final Set<Class<?>> classes = new HashSet<>();
|
||||||
|
/**
|
||||||
|
* 忽略loadClass时的错误
|
||||||
|
*/
|
||||||
|
private boolean ignoreLoadError = false;
|
||||||
|
/**
|
||||||
|
* 获取加载错误的类名列表
|
||||||
|
*/
|
||||||
|
private final Set<String> classesOfLoadError = new HashSet<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 扫描指定包路径下所有包含指定注解的类,包括其他加载的jar或者类
|
* 扫描指定包路径下所有包含指定注解的类,包括其他加载的jar或者类
|
||||||
@ -194,7 +202,7 @@ public class ClassScanner implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 构造,默认UTF-8编码
|
* 构造,默认UTF-8编码
|
||||||
*
|
*
|
||||||
* @param packageName 包名,所有包传入""或者null
|
* @param packageName 包名,所有包传入""或者null
|
||||||
* @param classPredicate 过滤器,无需传入null
|
* @param classPredicate 过滤器,无需传入null
|
||||||
*/
|
*/
|
||||||
public ClassScanner(final String packageName, final Predicate<Class<?>> classPredicate) {
|
public ClassScanner(final String packageName, final Predicate<Class<?>> classPredicate) {
|
||||||
@ -204,9 +212,9 @@ public class ClassScanner implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
*
|
*
|
||||||
* @param packageName 包名,所有包传入""或者null
|
* @param packageName 包名,所有包传入""或者null
|
||||||
* @param classPredicate 过滤器,无需传入null
|
* @param classPredicate 过滤器,无需传入null
|
||||||
* @param charset 编码
|
* @param charset 编码
|
||||||
*/
|
*/
|
||||||
public ClassScanner(String packageName, final Predicate<Class<?>> classPredicate, final Charset charset) {
|
public ClassScanner(String packageName, final Predicate<Class<?>> classPredicate, final Charset charset) {
|
||||||
packageName = StrUtil.emptyIfNull(packageName);
|
packageName = StrUtil.emptyIfNull(packageName);
|
||||||
@ -236,6 +244,10 @@ public class ClassScanner implements Serializable {
|
|||||||
* @since 5.7.5
|
* @since 5.7.5
|
||||||
*/
|
*/
|
||||||
public Set<Class<?>> scan(final boolean forceScanJavaClassPaths) {
|
public Set<Class<?>> scan(final boolean forceScanJavaClassPaths) {
|
||||||
|
//多次扫描时,清理上次扫描历史
|
||||||
|
this.classes.clear();
|
||||||
|
this.classesOfLoadError.clear();
|
||||||
|
|
||||||
for (final URL url : ResourceUtil.getResourceUrlIter(this.packagePath)) {
|
for (final URL url : ResourceUtil.getResourceUrlIter(this.packagePath)) {
|
||||||
switch (url.getProtocol()) {
|
switch (url.getProtocol()) {
|
||||||
case "file":
|
case "file":
|
||||||
@ -255,6 +267,24 @@ public class ClassScanner implements Serializable {
|
|||||||
return Collections.unmodifiableSet(this.classes);
|
return Collections.unmodifiableSet(this.classes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 忽略加载错误扫描后,可以获得之前扫描时加载错误的类名字集合
|
||||||
|
*
|
||||||
|
* @return 加载错误的类名字集合
|
||||||
|
*/
|
||||||
|
public Set<String> getClassesOfLoadError() {
|
||||||
|
return Collections.unmodifiableSet(this.classesOfLoadError);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置是否忽略所有错误
|
||||||
|
*
|
||||||
|
* @param ignoreLoadError 是否忽略错误
|
||||||
|
*/
|
||||||
|
public void setIgnoreLoadError(final boolean ignoreLoadError) {
|
||||||
|
this.ignoreLoadError = ignoreLoadError;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置是否在扫描到类时初始化类
|
* 设置是否在扫描到类时初始化类
|
||||||
*
|
*
|
||||||
@ -363,7 +393,13 @@ public class ClassScanner implements Serializable {
|
|||||||
} catch (final UnsupportedClassVersionError e) {
|
} catch (final UnsupportedClassVersionError e) {
|
||||||
// 版本导致的不兼容的类,跳过
|
// 版本导致的不兼容的类,跳过
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
throw new RuntimeException(e);
|
classesOfLoadError.add(className);
|
||||||
|
} catch (final Throwable e){
|
||||||
|
if(false == this.ignoreLoadError) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}else{
|
||||||
|
classesOfLoadError.add(className);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return clazz;
|
return clazz;
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
package cn.hutool.core.reflect;
|
package cn.hutool.core.reflect;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Console;
|
import cn.hutool.core.lang.Console;
|
||||||
import cn.hutool.core.reflect.ClassScanner;
|
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class ClassScanerTest {
|
public class ClassScannerTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
@ -21,7 +20,7 @@ public class ClassScanerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void scanPackageBySuperTest(){
|
public void scanPackageBySuperTest() {
|
||||||
// 扫描包,如果在classpath下找到,就不扫描JDK的jar了
|
// 扫描包,如果在classpath下找到,就不扫描JDK的jar了
|
||||||
final Set<Class<?>> classes = ClassScanner.scanPackageBySuper(null, Iterable.class);
|
final Set<Class<?>> classes = ClassScanner.scanPackageBySuper(null, Iterable.class);
|
||||||
Console.log(classes.size());
|
Console.log(classes.size());
|
||||||
@ -29,9 +28,19 @@ public class ClassScanerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void scanAllPackageBySuperTest(){
|
public void scanAllPackageBySuperTest() {
|
||||||
// 扫描包,如果在classpath下找到,就不扫描JDK的jar了
|
// 扫描包,如果在classpath下找到,就不扫描JDK的jar了
|
||||||
final Set<Class<?>> classes = ClassScanner.scanAllPackageBySuper(null, Iterable.class);
|
final Set<Class<?>> classes = ClassScanner.scanAllPackageBySuper(null, Iterable.class);
|
||||||
Console.log(classes.size());
|
Console.log(classes.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
public void scanAllPackageIgnoreLoadErrorTest() {
|
||||||
|
final ClassScanner classScanner = new ClassScanner(null, null);
|
||||||
|
classScanner.setIgnoreLoadError(true);
|
||||||
|
final Set<Class<?>> classes = classScanner.scan(false);
|
||||||
|
Console.log(classes.size());
|
||||||
|
Console.log(classScanner.getClassesOfLoadError());
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user