Импорт ресурсов из пакета OSGi - PullRequest
11 голосов
/ 27 сентября 2011

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

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

Чего я хотел бы добиться, так это:

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

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

Ответы [ 3 ]

10 голосов
/ 27 сентября 2011

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

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

1 голос
/ 27 сентября 2011

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

Больше подробностей в OSGi Core Spec #3.13 Фрагмент связки

0 голосов
/ 23 августа 2013

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

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

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

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

...