Доступ к ресурсам в другом пакете osgi ?

Я создал два пакета OSGI A и B, используя мастер проекта подключаемого модуля eclipse (используя eclipse Helios).

В файл манифеста комплекта BI добавили комплект A в качестве зависимости. Далее я экспортировал пакеты в A, чтобы они были видны для B. У меня также есть файл .properties в комплекте A, который я хотел бы сделать видимым для пакета B. В сборке. Панель свойств в пакете AI указала:

source.. = src/
bin.includes = META-INF/,\
               .,\
               bundle_A.properties

Теперь в комплекте BI попробуйте загрузить файл .properties, используя:

  private Properties loadProperties() {
    Properties properties = new Properties();
    InputStream istream = this.getClass().getClassLoader().getResourceAsStream(
        "bundle_A.properties");
    try {
      properties.load(istream);
    } catch (IOException e) {
      logger.error("Properties file not found!", e);
    }
    return properties;
  }

Но это дает исключение нулевого указателя (файл не найден в пути к классам).

Возможно ли это экспортировать ресурсы из пакета A (как при экспорте пакетов) или каким-либо другим способом получить доступ к файлу в A из B (доступ к загрузчику классов для пакета A из пакета B)?

13
задан Hunsu 22 January 2016 в 16:06
поделиться

4 ответа

Если вы пишете подключаемый модуль Eclipse, вы можете попробовать что-нибудь вроде:

Bundle bundle = Platform.getBundle("your.plugin.id");

Path path = new Path("path/to/a/file.type");

URL fileURL = Platform.find(bundle, path);

InputStream in = fileURL.openStream();
3
ответ дан 1 December 2019 в 22:22
поделиться

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

Многие могут счесть это лучшим дизайном, поскольку это позволяет изменять имя или способ хранения ресурса, не ломая клиентов пакета A.

.
2
ответ дан 1 December 2019 в 22:22
поделиться

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

Для этого не нужно использовать загрузчик классов пакета.

16
ответ дан 1 December 2019 в 22:22
поделиться

Вы пытались использовать BundleContext пакета A для загрузки ресурсов?

1
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: