Встраивание транзитивных зависимостей в OSGI

У меня есть пакет OSGI, который зависит от сторонней библиотеки, я не хочу развертывать эту библиотеку в контейнере, я бы предпочел встроить ее в свой пакет.

Конечно, у этой библиотеки есть свои зависимости, я тоже хочу их встроить.

Я использую Maven Bundle Plugin:

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
   <configuration>
     <instructions>
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
        <Bundle-Description>${project.description}</Bundle-Description>
        <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
        <Meta-Persistence>...</Meta-Persistence>
        <Export-Package>...</Export-Package>
        <Import-Package>...</Import-Package>
        <Embed-Dependency>3rd-Party</Embed-Dependency>                      
        <Embed-Transitive>true</Embed-Transitive>
      </instructions>
    </configuration>
</plugin>

В результате 3rd-Party внедряется в результирующий пакет, но НЕ его транзитивные зависимости, как будто <Embed-Transitive>true</Embed-Transitive> не имеет никакого эффекта.

Так что у меня есть вопросы

  • Это правильный способ встраивать стороннюю библиотеку транзитивным способом?
  • Позаботится ли это о сгенерированном файле манифеста (без импорта пакетов, принадлежащих сторонней библиотеке и ее зависимостям)?

Спасибо


person isco    schedule 07.03.2017    source источник
comment
Вы решили эту проблему?   -  person Perimosh    schedule 10.05.2019
comment
Если я правильно помню, нет. И это была одна из причин, по которой я перестал использовать OSGI.   -  person isco    schedule 13.05.2019
comment
Вы нашли проблему? У меня была такая же проблема: stackoverflow.com/questions/58457282/. Все еще ищу решение.   -  person Tadija Malić    schedule 23.10.2019
comment
Нет, и я отказался от OSGI из-за этого, не стоит беспокоиться   -  person isco    schedule 23.10.2019


Ответы (1)


О встроенной зависимости: если вы посмотрите на felix docs они всегда используют область видимости, например: ;scope=compile|runtime.

Возможно, имена зависимых пакетов также должны соответствовать заданному регулярному выражению. Если вы хотите встроить большую часть jar-файлов и опустить лишь некоторые из них, возможно, вы можете встроить *, а затем исключить некоторые с помощью!.

О манифесте: плагин пакета maven должен позаботиться об адаптации импорта к вашим встроенным пакетам. Поэтому не должно быть импорта для встроенных пакетов.

person Christian Schneider    schedule 10.03.2017
comment
Привет, Кристиан, ты думаешь, что есть проблема с указанием точного имени сторонней библиотеки? - person isco; 14.03.2017
comment
Что касается импорта для встроенных пакетов, список импортированных пакетов растет очень быстро, когда я встраиваю зависимости, я думаю, что плагин не заботится об этом - person isco; 14.03.2017
comment
Большая проблема многих библиотек заключается в том, что они используют множество необязательных зависимостей. Если вы просто встраиваете такую ​​библиотеку, вы также получаете дополнительные файлы deps. Такое дерево может очень быстро расти. Если это так, и вы знаете, что вам не нужны некоторые из дополнительных deps, вы можете попытаться исключить их в maven. - person Christian Schneider; 06.04.2017