Проблемы с пакетом импорта OSGi

Я разрабатываю пакет с некоторыми сторонними зависимостями. Пакет ссылается на основные функции и функции подключения из двух разных банок этой третьей стороны.

Затем я делаю Import-Package с maven-bundle-plugin, я мог использовать только один пакет импорта из любой банки, а не оба одновременно (ссылался на другие потоки и не мог получить четкое представление об импорте JAR) . Или это проблема с организацией пакетов сторонних?

JAR A -> package -> com.test.pkg [содержит class1, class2] JAR B -> package -> com.test.pkg [содержит class3]

Пакет импорта импортирует com.test.pkg, но моему приложению нужен класс 3, и когда во время выполнения мои контейнеры выдают исключение ClassDefNotFoundException, когда упоминается класс 3. Не уверен, что неправильно понял концепцию.

Фрагмент POM приведен ниже.

<Import-Package>*,com.test.pkg</Import-Package>

Есть ли способ, которым я могу сообщить своему контейнеру OSGi, чтобы получить пакет из определенного JAR?


person akumaras    schedule 15.02.2018    source источник


Ответы (1)


Это называется «разделить пакет», и именно поэтому в OSGi не рекомендуется дублировать имя пакета в нескольких пакетах.

Есть несколько способов решить вашу проблему. Самый простой способ — упаковать обе сторонние банки в новую банку, а затем экспортировать то, что вам нужно, из убер-банки. Вы можете распаковать банки в исходные папки или включить исходные банки в папку lib. Затем включите манифест, который экспортирует то, что вам нужно.

Если вам нужно привязать OSGi-клиент только к одному из jar-файлов, вы можете использовать require-bundle вместо import-package. Это не лучший дизайн, так как вынуждает вас указывать пакет вместо пакета, но иногда это лучший вариант.

Наконец, вы можете использовать директиву split-package для большего контроля над процессом связывания. Если вы не хотите переупаковывать сторонние jar-файлы с обновленным манифестом, вам придется создать пакет фрагментов, чтобы указать там директивы разделенного пакета.

person Steven Spungin    schedule 15.02.2018
comment
Да, я переупаковал код из OSS с уникальными именами пакетов, что, похоже, решило проблему. Экспортированы необходимые пакеты из нового пакета. Это помогло. - person akumaras; 16.02.2018