java - Google Guava getTopLevelClasses 返回空集

标签 java package classpath guava

我在网上查了很多资料都没有结果。我试图使用 Guava 获取我的包中的所有类,但它的行为不符合预期。它总是返回一个空集,使得无法对给定的结果执行任何操作。系统变量可能有问题,或者有其他障碍吗?

这是我的一些代码。

        String packageName = "me.travja.package";
        ImmutableSet<ClassPath.ClassInfo> root = null;
        try {
            System.out.println(ClassPath.from(getClass().getClassLoader()));
            root = ClassPath.from(getClass().getClassLoader()).getTopLevelClasses();//.getTopLevelClassesRecursive(packageName);
        } catch (IOException e) {
            e.printStackTrace();
        }

        for (ClassPath.ClassInfo info : root) {


            System.out.println(info.getPackageName() + " -- " + info.getSimpleName());
        }

它永远不会到达最后一个sout,因为它是空的,但是打印类路径的那个会打印“com.google.common.reflect.ClassPath@33571c14”,这并不是非常有用。但据我所知,这不应该更像我的应用程序目录吗?

感谢您对此的帮助。这个问题困扰我太久了。

编辑:我做了一些挖掘。如果我的文件路径不包含空格,它似乎会按预期工作。我读到一点,这曾经是旧版本中 Guava 的问题,但我什至尝试使用 Maven 并对最新版本的 Guava 进行着色。有什么方法可以解决这个问题,还是我只需要小心我的文件路径中永远没有空格?

最佳答案

经过更多挖掘后,我使用的其他依赖项之一已经遮盖了旧版本的 Guava,这就是我的代码正在使用的。结果就坏了。我使用了反编译器,这样我就可以手动将 ClassPath 类从较新的 Guava 阴影化到我自己的代码中,并将其导入。现在可以完美运行。

关于java - Google Guava getTopLevelClasses 返回空集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60797060/

相关文章:

java - 如何使用 java.util.Date 获取从特定时间到当前时间的分钟数?

java - 继承和私有(private)实例变量

python - 无法为 Python 安装新包(Python 3.9.0、Windows 10)

java - Play Framework 中子项目类中的包名称(命名空间)

java - 在 linux 中指定类路径 *.jar 时无法添加多个 jar

java - <html> 和 <html :html> element in JSP? 之间有什么区别

java - java中的ActionListener在第二次单击时执行操作

oracle - 封装规范中的程序

eclipse - 如何在Eclipse启动配置中将变量用于类路径定义?

java - 在客户端计算机上部署 java(swing, oracle) 项目时出错... java.lang.ClassNotFoundException :oracle. jdbc.driver.oracleDriver