Google Guava getTopLevelClasses返回空集

问题描述 投票:0回答:1

我一直在互联网上搜索,但无济于事。我正在尝试使用番石榴来获取我的软件包中的所有类,但是它的行为不符合预期。它总是返回一个空集,因此无法对给定的结果执行任何操作。系统变量或其他障碍可能存在问题吗?

这是我的一些代码。

        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());
        }

它永远不会命中最后一个出口,因为它是空的,但是打印类路径的那个却打印'com.google.common.reflect.ClassPath@33571c14',这不是超级有用。但是据我所知,这不应该与我的应用程序的目录更相似吗?

谢谢您的帮助。一直困扰着我太久了。

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

java package classpath guava
1个回答
0
投票

经过更多的挖掘之后,我正在使用的其他依赖项之一为Guava的较旧版本提供了阴影,这就是我的代码所使用的。结果,它被打破了。我使用了一个反编译器来将ClassPath类从较新的Guava中手动着色到我自己的代码中,并将其导入。现在可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.