这是对java ClassGraph api的有效使用吗



使用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构造函数#配置类图实例

相关内容

最新更新