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

1 ответ

Это было из-за версии Гуавы. По какой-то причине Guava-14, который используется на первом компьютере, работает там нормально, но на втором мне пришлось заменить его на Guava-22. Но после этого все работало нормально.

Другие вопросы по тегам