maven-bundle-plugin Создает неожиданное содержимое Import-Package

Я собираю все свои пакеты, используя maven-bundle-plugin, и после некоторых тестов с pax:provision я обнаружил, что он создает Import-Package=org.osgi.framework;version="[1.8,0)" для всех пакетов, и в момент установки пакетов в Felix все мои пакеты не разрешены из-за org.osgi.framework.BundleException: Unresolved constraint in bundle com.domain.mybundle [55]: Unable to resolve 55.0: missing requirement [55.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0))).

Почему maven-bundle-plugin создает этот заголовок, если у меня нет прямой зависимости от этого пакета. Я также попытался добавить зависимость:

<dependency>
  <groupId>org.apache.felix</groupId>
  <artifactId>org.apache.felix.framework</artifactId>
  <version>4.6.0</version>
</dependency>

И он по-прежнему использует версию 1.8.0. Есть идеи, почему?

ОБНОВЛЕНИЕ

Проверив еще раз, пакеты действительно используют org.osgi.framework в активаторе. но этот класс org.osgi.framework.BundleActivator происходит из пакета:

<dependency>
  <groupId>org.osgi</groupId>
  <artifactId>org.osgi.core</artifactId>
  <version>4.3.1</version>
  <scope>provided</scope>
  <optional>true</optional>
</dependency>

Итак, еще раз, почему maven-bundle-plugin не использует версию 4.3.1 вместо 1.8.0? А в других бандлах использует версию 1.6.2.

ОБНОВЛЕНИЕ 20 марта 2015 г.

Это исключение, которое я получаю после выполнения mvn pax:provision

org.osgi.framework.BundleException: Unresolved constraint in bundle org.classdomain.per
sistence [47]: Unable to resolve 47.0: missing requirement[47.0] osgi.wiring.package; 
(&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0)))ERROR: 
Bundle org.classdomain.persistence [47] Error starting file:bundles/org.classdomain.per
sistence_0.1.0.jar (org.osgi.framework.BundleException: Unresolved constraint in bundle
 org.classdomain.persistence [47]: Unable to resolve 47.0: missing requirement [47.0] o
sgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(versio
n>=2.0.0))))

        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4002)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2045)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1299)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
        at java.lang.Thread.run(Thread.java:745)

Определенно похоже, что это исключение происходит только при использовании mvn pax:provision, если я устанавливаю те же пакеты в отдельном экземпляре Felix, тогда все работает, как и ожидалось.


person Joe Almore    schedule 16.03.2015    source источник


Ответы (1)


Операторы Import-Package создаются в соответствии с определенными версиями пакетов в используемых вами библиотеках. В вашем случае у вас есть зависимость от org.apache.felix.framework, которая определяет эти экспорты (например, org.osgi.framework версии 1.8) в своем манифесте.

Если у вас есть зависимость только от org.osgi.core 4.3.1, пакет org.osgi.framework должен быть определен с версией 1.6. Так что это должно работать.

person Christian Schneider    schedule 17.03.2015
comment
Спасибо за Ваш ответ. Да, но если я использую зависимость org.osgi.core 4.3.1, тогда пакет определяет Import-Package для org.osgi.framework 1.6, тогда он (Феликс) говорит, что org.osgi.framework 1.6 не существует! так какой смысл для плагина maven-bundle-plugin менять его на 1.6, если он будет отображаться как «отсутствующее требование»? - person Joe Almore; 17.03.2015
comment
Похоже, что-то не так в ваших настройках. Я всегда использую org.osgi.core 4.3.1, и полученный пакет работает на всех платформах osgi, с которыми я работал (felix, equinox). Диапазон импорта [1.6,0) означает, что подойдет любая версия ›=1.6 этого пакета. Поэтому, если felix 4.6.0 предлагает версию 1.8, она будет совместима. Можете ли вы опубликовать точную ошибку, которую вы получаете при использовании спецификации org.osgi.core 4.3.1? - person Christian Schneider; 18.03.2015
comment
Привет, только что обновил вопрос и опубликовал подробную информацию об ошибке, полученной Феликсом под pax:provision. Наконец-то я протестировал его без плагина Pax, и он работает. Итак, я закончил тем, что удалил плагин Pax и скопировал сгенерированные пакеты вместе с зависимостями в другую папку, чтобы затем вручную установить их все в экземпляр Felix (папку пакетов) и протестировать пакеты оттуда. - person Joe Almore; 20.03.2015