Guava ClassPath.from(MyClass.class.getClassLoader()).getTopLevelClassesRecursive( "mypackage" ) 返回 0



在我的一个项目中,我使用Guava从命令行获取类名,然后调用适当的构造函数。用户使用如下内容运行.bat文件:

java -jar MyClass.jar OtherClass

OtherClass 位于某个包中,例如 mypackage.otherpackage。我想在代码中调用它的构造函数。为了找到构造函数,我使用 Guava:

Constructor classConstructor = null;
Set<ClassInfo> classInfos = ClassPath.from(MyClass.class.getClassLoader()).getTopLevelClassesRecursive("mypackage");
List<String> packageNames = classInfos.stream().map(classInfo -> classInfo.getPackageName()).distinct().collect(Collectors.toList());
for (String p : packageNames) {
try {
classConstructor = Class.forName(p + "." + args[0]).getConstructor(String.class);
} catch (ClassNotFoundException ex) {
}
if (classConstructor != null)
break;
}

它在一台计算机上完美运行,但在另一台计算机上根本不起作用,因为ClassPath.from(MyClass.class.getClassLoader()).getTopLevelClassesRecursive("mypackage");返回 0 个元素。我不明白为什么。两台计算机上的代码是相等的,包是相等的,类也是相等的。

这是因为番石榴版本。出于某种原因,第一台计算机上使用的 Guava-14 在那里工作正常,但在第二台计算机上,我不得不用 Guava-22 替换它。但在此之后一切正常。

相关内容

  • 没有找到相关文章

最新更新