使用compile'io.github.classgraph:classgraph:4.8.65'
https://github.com/classgraph/classgraph/wiki/ClassGraph-API
Java 8
ScanResult scanResult =
new ClassGraph().enableAllInfo()
.whitelistPackages("abc1")
.whitelistPackages("abc2")
.whitelistPackages("java")
.scan();
当我遇到包abc1或abc2中类的ClassInfo对象时,它们能够引用java.util.HashMap之类的东西,我在FieldInfo中看到它们。
但是,当我继续执行scanResult.getClassInfo("java.util.HashMap"(时,它返回null。(对于abc1或abc2包中的其他类,遵循FieldInfos确实返回了更多ClassInfo对象(
我的问题是,认为我能够通过如上所示的ClassGraph方法链接将ClassInfo对象获取到javajre类是否正确?
添加了这个失败的测试,令人惊讶的是,它只打印一个类,而不是预期的几十个:
package abc;
import io.github.classgraph.ScanResult;
import io.github.classgraph.ClassGraph;
import io.github.classgraph.ClassInfo;
import java.util.*;
import java.io.*;
import java.util.function.*;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@SpringJUnitConfig
@SpringBootTest(classes = {})
public class ExamplesSpec {
@org.junit.jupiter.api.Test
@org.junit.jupiter.api.DisplayName(value="test_for_built_in_java_jre_classes")
public void test_on_line_42() throws Exception {
System.out.println("test_for_built_in_java_jre_classes");
ClassInfo found = null;
try (
ScanResult result = new ClassGraph().enableAllInfo().whitelistPackages("java.util").scan()
) {
System.out.println("here all the classes....");
for( ClassInfo item : result.getAllClasses()) {
System.out.println("here classinfo: " + item);
}
found = result.getClassInfo("java.util.HashMap");
}
assert found != null;
}
}
唯一找到的类是:
here-classinfo:公共类java.util.zip.FSZipFile实现java.util.zip ZipConstants
找到了答案!
在ClassGraph的设置中,为了扫描jre提供的类,您需要将其添加到方法链接中:
.enableSystemJarsAndModules((
例如:
new ClassGraph().enableAllInfo()
.whitelistPackages("abc1")
.whitelistPackages("abc2")
.whitelistPackages("java")
.enableSystemJarsAndModules()
.scan();
这在这里的文档中有详细说明:
https://github.com/classgraph/classgraph/wiki/API:-ClassGraph构造函数#配置类图实例