Импорт ресурсов из пакета 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-адреса содержат абсолютное местоположение в комплекте.