Google Guava getTopLevelClasses возвращает пустой набор - PullRequest
0 голосов
/ 22 марта 2020

Я искал по всему инте rnet безрезультатно. Я пытаюсь использовать 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. Есть ли способ исправить это, или мне просто нужно быть осторожным, чтобы в пути к моему файлу никогда не было пробела?

1 Ответ

0 голосов
/ 22 марта 2020

После еще нескольких копаний, одна из других зависимостей, которую я использовал, затеняла старую версию Guava, и именно это использовал мой код. В результате он был сломан. Я использовал декомпилятор, чтобы вручную затенить класс ClassPath из более новой Guava в свой собственный код и импортировал его. Теперь работает без нареканий.

...