Как я могу совместно использовать non-OSGi библиотеки между пакетами в контейнере OSGi?

Я достиг тех же результатов с помощью GAC в прошлом, но необходимо подвергнуть сомнению причины того, чтобы иметь необходимость сослаться больше чем на одну версию и стараться избегать ее, если это возможно. Если необходимо сделать это, , переадресация связывания может помочь в случае.

кроме того, Вы читали это уже?

8
задан Community 23 May 2017 в 12:08
поделиться

2 ответа

Используя Maven, очень легко создать пакет OSGi из любой библиотеки. Однако я думаю, что такой же результат можно получить и с другими механизмами. Решение Maven помогло мне понять, как оно работает.

Создание пакета осуществляется путем создания проекта, в котором есть библиотека в качестве зависимости, и последующей упаковки проекта с помощью maven-bundle-plugin из Проект Apache Felix и указание пакетов библиотеки с помощью инструкции Export-Package . Я использовал это для совместного использования буферов протокола Google между пакетами внутри контейнера OSGi:

<?xml version="1.0" encoding="UTF-8" ?>
<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example.lib</groupId>
  <artifactId>protobuf-dist</artifactId>
  <version>2.1.0</version>
  <name>Google Protocol Buffers OSGi Distribution</name>
  <packaging>bundle</packaging>

  <dependencies>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>2.1.0</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Export-Package>com.google.protobuf</Export-Package>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Если вы хотите, чтобы все транзитивные зависимости были объединены в пакет, используйте цель плагина bundleall .

Плагин распознает и учитывает существующие манифесты OSGi в зависимости.

Вы можете также используйте подключаемый модуль пакета, чтобы просто создать манифест и сообщить модулю упаковки jar (или встроенной сборке jar-with-dependencies ) использовать этот манифест через раздел архива. На указанной выше странице плагина показано, как это сделать.

Вы также можете использовать подключаемый модуль пакета, чтобы просто создать манифест и указать модулю упаковки jar (или встроенной сборке jar-with-dependencies ) использовать этот манифест через раздел архива. На указанной выше странице плагина показано, как это сделать.

Вы также можете использовать подключаемый модуль пакета, чтобы просто создать манифест и указать модулю упаковки jar (или встроенной сборке jar-with-dependencies ) использовать этот манифест через раздел архива. На указанной выше странице плагина показано, как это сделать.

8
ответ дан 5 December 2019 в 10:04
поделиться

Дополнительный путь для тех, кто не очень увлечен maven, не может портировать или полностью доволен ant / ivy

. Я обнаружил, что самый простой способ выполнить заявленную задачу - это превратить не-OSGi-библиотеку в OSGi-библиотеку, разрешив манифесту экспортировать каждый пакет и добавить некоторые подходящие символические имена / версии. Я смог сделать это ОЧЕНЬ легко с помощью bnd через задачи ant (или даже прямой вызов из командной строки). Существуют также репозитории , которые содержат "обновленные" версии многих популярных библиотек. Некоторые библиотеки (joda-time) уже поставляются с правильными манифестами OSGi.

9
ответ дан 5 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

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