Я достиг тех же результатов с помощью GAC в прошлом, но необходимо подвергнуть сомнению причины того, чтобы иметь необходимость сослаться больше чем на одну версию и стараться избегать ее, если это возможно. Если необходимо сделать это, , переадресация связывания может помочь в случае.
кроме того, Вы читали это уже?
Используя 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
) использовать этот манифест через раздел архива. На указанной выше странице плагина показано, как это сделать.
Дополнительный путь для тех, кто не очень увлечен maven, не может портировать или полностью доволен ant / ivy
. Я обнаружил, что самый простой способ выполнить заявленную задачу - это превратить не-OSGi-библиотеку в OSGi-библиотеку, разрешив манифесту экспортировать каждый пакет и добавить некоторые подходящие символические имена / версии. Я смог сделать это ОЧЕНЬ легко с помощью bnd через задачи ant (или даже прямой вызов из командной строки). Существуют также репозитории , которые содержат "обновленные" версии многих популярных библиотек. Некоторые библиотеки (joda-time) уже поставляются с правильными манифестами OSGi.