2016-05-05 2 views
0

Я пытаюсь найти набор имен пакетов во всех модулях OSGi, используя метод findEntries() BundleWiring. Для всех остальных модулей, я могу просто запуститьКак использовать BundleWiring.findEntries() в системном комплекте?

bundleWiring.findEntries("/" + packageName, "*.class", 2)

, чтобы получить URL, для всех классов в этом пакете.

Проблема заключается в том, что этот подход не работает для системного пакета OSGi (комплект 0). Через classloader я смог увидеть, что классы, которые я хочу, находятся в tomcat/webapps/ROOT/WEB-INF/lib/x.jar, но как я могу найти путь к этим классам, если мне предоставляется только System Bundle как расслоение?

Пакеты экспортируются в system.packages.extra.mf

+0

Что вы на самом деле пытаетесь сделать с этой информацией? –

+0

Я пытаюсь проверить проблемы с разделенным пакетом, менеджер хочет избежать редактирования пакета, если оба пакета имеют один и тот же пакет с одинаковыми классами. Поэтому, когда системный пакет и конфликт модулей связаны, мне нужен способ получить все классы в пакете системных пакетов, чтобы проверить пакет пакета модулей. – tom

+0

Это похоже на то, что вы должны делать в режиме сборки, а не во время выполнения. В этом случае вы можете просто посмотреть файлы JAR. –

ответ

1

Это не представляется возможным, так как система расслоение только «вне» OSGi. Вы можете использовать произвольный ClassLoader для загрузки OSGi Framework, а ClassLoaders не имеют возможности перебирать пакеты или классы, о которых они знают.

Смежные вопросы