【问题标题】:Google Guava getTopLevelClasses returns empty setGoogle Guava getTopLevelClasses 返回空集
【发布时间】:2020-03-23 03:55:17
【问题描述】:

我一直在互联网上四处搜索,但无济于事。我正在尝试使用 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',这不是很有用。但据我所知,这不应该更像我的应用程序目录吗?

感谢您对此的帮助。困扰我太久了。

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

【问题讨论】:

    标签: java package classpath guava


    【解决方案1】:

    在进行了更多挖掘之后,我使用的其他依赖项之一已经遮蔽了旧版本的 Guava,这就是我的代码所使用的。结果,它被打破了。我使用了反编译器,因此我可以手动将 ClassPath 类从较新的 Guava 隐藏到我自己的代码中,然后将其导入。现在完美运行。

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2010-09-25
      • 2015-07-04
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      相关资源
      最近更新 更多