У меня есть целая куча модулей фреймворка, которые отлично работают на OSGi, все сервисы и компоненты находят друг друга и работают нормально.
Однако есть одна структура, которая делает некоторые динамические вещи в отношении классов. По сути, в какой-то момент вы даете ему имя класса, и он выполняет Class.forName(), а затем происходит магия отражения.
Это прекрасно работает при работе в стандартном jvm и использовании SPI для соединения фреймворков, но в OSGi это не работает, потому что, конечно, этот случайный класс «test.MyTest», к которому вы пытаетесь подойти через фреймворк, не виден указанному фреймворку.
Он выдаст «java.lang.ClassNotFoundException: test.MyTest не найден фреймворком».
Итак, мой вопрос: как я могу решить эту нехватку видимости для фреймворка, который должен видеть все? Import-Package: *
?
ОБНОВЛЕНИЕ
Предполагая, что OSGi не сильно изменился с 2010 года в этом отношении, статья http://njbartlett.name/2010/08/30/osgi-readiness-loading-classes.html очень интересно. В настоящее время я добавил поддержку как для активно регистрируемых классов, так и для внедрения фабрики доменов через OSGi.
Кроме того, при разрешении по умолчанию в любом случае используется контекстный загрузчик классов, поэтому, если ничего не помогает, он будет использоваться для попытки загрузить класс.
ОБНОВЛЕНИЕ
Я также добавил поддержку предложенного DynamicImport-Package
, что проще для небольших проектов.