Используя 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
) использовать этот манифест через раздел архива. На странице плагина, указанной выше, показано, как это сделать.