Список всех подпакетов пакета (когда их классы загружаются динамически) - PullRequest
0 голосов
/ 14 января 2019

Я кодирую на Eclipse. В пакете с именем com.something.drivers я создал несколько подпакетов, содержащих классы, которые реализуют некоторые общие интерфейсы. Это пример шаблона Driver, поэтому классы в подпакете будут загружаться динамически из основного приложения. Поскольку все классы в каждом подпакете драйвера имеют одно и то же имя, приложение может угадать полное имя класса сразу после имени пакета.

Сейчас я пытаюсь получить список установленных драйверов (подпакеты в пакете com.something.driver). Я не хочу вести отредактированный вручную список, а просто получить его из фактически установленных драйверов.

Я прочитал Список всех подпакетов пакета и узнал, как использовать класс Package, но я обнаружил, что Package.getPackage(com.something.driver).getPackages() возвращает ноль, поскольку классы в подпакетах в com.something.driver только загружается динамически и по одному.

Я потерян в этот момент. Я полагаю, что Package класс - это не тот путь, но, вероятно, перейдите к проверке дерева классов с помощью getResource?

Так заранее.

1 Ответ

0 голосов
/ 14 января 2019

Почти наверняка лучший способ справиться с этим - создать список как шаг сборки (возможно, как .java файл).

Package.getPackage устарело.

Package.getPackages - это статический метод - он не делает то, что вы думаете, он делает.

Оба метода используют загрузчик классов вызывающей стороны, что удивительно и не очень полезно, если вы "действительно" динамически загружаете классы.

Для незагруженных классов, я полагаю, вы смотрите на получение пути к классу для вашего загрузчика классов (предполагая, что это URLClassLoader в некотором роде) и обходе каталогов / прочитанных каталогов jar / zip (или манифеста, если он есть) ).

Модули могут быть полезны - я на самом деле не смотрел на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...