На самом деле есть решения для этого, оба немного отличающиеся от того, что вы делаете сейчас:
- Сборка один пакет "сторонних зависимостей", который будетВнедрить все зависимости, отличные от OSGi, которые есть в вашем проекте.
- Преобразовать каждую зависимость, отличную от OSGi, в комплект OSGi.
Вариант 1 легче обрабатывать, поэтому я думаю, что большинство проектов делают это.Лично я предпочитаю вариант 2. У нас есть шаблон Maven «pom.xml», который мы используем для преобразования этих зависимостей.
«pom.xml» выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<library.groupId></library.groupId>
<library.artifactId></library.artifactId>
<library.version></library.version>
</properties>
<artifactId></artifactId>
<packaging>bundle</packaging>
<name></name>
<description>${library.groupId}:${library.artifactId}:${library.version}</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Import-Package>*;resolution:=optional</Import-Package>
<Export-Package>*</Export-Package>
<Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>${library.groupId}</groupId>
<artifactId>${library.artifactId}</artifactId>
<version>${library.version}</version>
</dependency>
</dependencies>
</project>
Это делает:
- Добавить не-OSGi библиотеку как зависимость
- Скажите
maven-bundle-plugin
, чтобы встроить эту зависимость (транзитивно) - Скажите
maven-bundle-plugin
для экспорта всехиз пакетов зависимостей
Я оставил некоторые вещи пустыми, которые вы должны установить, например library.groupId
, library.artifactId
и library.version
.И кое-что нам нужно настроить в maven-bundle-plugin
.Но это наша отправная точка.К примеру, вы не хотите экспортировать все пакеты и т. Д.
Если у вас действительно есть 100+ зависимостей, которые вам нужно преобразовать, вам лучше использовать этот шаблон и просто добавить все свои 100 зависимостей в качестве зависимостии соберите одну большую связку со всеми ними внутри.
Документацию по maven-bundle-plugin
можно найти здесь:
https://felix.apache.org/documentation/subprojects/apache-felix-maven-bundle-plugin-bnd.html
На данный момент я также хочуупомянуть, что есть новый плагин пакета, который вы можете рассмотреть для этого: bnd-maven-plugin
.
См .: https://github.com/bndtools/bnd/tree/master/maven/bnd-maven-plugin