Импорт ресурсов из пакета OSGi

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

Возможно ли вообще импортировать ресурсы, которые не связаны с пакетом, в другой пакет?

Я бы хотел достичь этого:

Bundle A имеет файловый ресурс в корневом каталоге

Bundle B импортирует пакеты A: s пакеты и ресурсы. Через пакет B: s ClassLoader, я хотел бы иметь возможность загружать ресурс в пакете A, как если бы он существовал в Bundle B.

Ответ 1

Ресурсы в корневом каталоге пакета находятся в пакете "по умолчанию", который нельзя импортировать или экспортировать.

Если вам действительно нужно получить доступ к ресурсам через загрузчик классов, вам необходимо перенести их в пакет и экспортировать этот пакет. В противном случае вы можете использовать Bundle.getEntry() для чтения ресурсов из любого места любого пакета.

Ответ 2

Вы можете использовать фрагменты OSGi Fragment. Для вашего случая: bundle B является хостом и связкой A является фрагментом пакета B. Но пакет B имеет доступ ко всем классам и ресурсам (папкам) пакета A.

Подробнее в OSGi Core SpeС# 3.13 Фрагментные пакеты

Ответ 3

Создайте новый поток, а затем создайте новый загрузчик классов, который указывает на необходимые файлы.

Посмотрите на этот фрагмент:

ClassLoader c = new URLClassLoader(urls);
thread.setContextClassLoader(c);

Затем загрузчик классов потоков может загружать файлы в пакете, где URL-адреса содержат абсолютное местоположение в комплекте.