Зависимость OSGi для org.beanio не разрешается

Я пытаюсь OSGify свои проекты.

Я использую Fuse jboss-fuse-6.2.1.redhat-084, и если я смотрю на osgi:headers для пакета, я получаю красную ошибку org.beanio.

Import-Package =
    com.thoughtworks.xstream;version="[1.4,2)",
    javax.activation,
    javax.mail;version="[1.4,2)",
    javax.mail.internet;version="[1.4,2)",
    javax.xml.bind,
    org.apache.activemq.camel.component,
    org.apache.camel;version="[2.15,3)",
    org.apache.camel.builder;version="[2.15,3)",
    org.apache.camel.dataformat.bindy.fixed,
    org.apache.camel.spring.spi;version="[2.15,3)",
    org.apache.cxf.interceptor;version="[3.0,4)",
    org.apache.log4j;version="[1.2,2)",
    org.beanio;version="[2.1,3)",
    (others)

Ошибка:

отсутствует требование osgi.wiring.package; (&(osgi.wiring.package=org.beanio)(версия>=2.1.0)(!(версия>=3.0.0))))

Я сам явно не импортирую beanio: он получает его из org.jboss.fuse.bom для этого Fuse. camel-beanio version это 2.15.1.redhat-621084 и использует org.beanio v2.1.0.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-beanio</artifactId>
    </dependency>

Я провел поиск в osgi:classes, и ничто не использует версию 3.0. Кроме того, v3.0 даже не существует. Итак, я не знаю, откуда он взял это «[2.1,3)».

Я разобрался, как указать 2.1.0, но он потом просто жалуется, что не может найти 2.1.0.

Итак, что мне делать? Ничего не экспортируется 2.1.0. Но я не могу избавиться от него из Import-Package, потому что * включает его после поиска кода.


person djb    schedule 05.09.2016    source источник
comment
вы, кажется, неправильно понимаете сообщение об ошибке. В нем говорится, что требуется org.beanio версия ›= 2.1.0 и НЕ ›= 3.0.0... синтаксис [2.1,3) означает 2.1 включительно, до 3 эксклюзивных.   -  person Renato    schedule 05.09.2016
comment
Сначала вы можете установить camel-beanio, запустив install:feature camel-beanio в оболочке Fuse. И вы всегда должны использовать в своем проекте ту же версию, что и Fuse.   -  person Claus Ibsen    schedule 06.09.2016


Ответы (2)


Как вы сами сказали: «Версия camel-beanio — 2.15.1.redhat-621084, и в ней используется org.beanio v2.1.0».

Вам просто нужно это в вашем pom:

<dependency>
    <groupId>org.beanio</groupId>
    <artifactId>beanio</artifactId>
    <version>2.1.0</version>
</dependency>

Это в Maven Central, поэтому должно работать.

Как я уже упоминал в комментарии, сообщение об ошибке, которое вы получили, говорит о том, что вам нужен пакет org.beanio версии >= 2.1.0, а НЕ >= 3.0.

Приведенная выше зависимость предоставляет этот пакет, как вы можете увидеть здесь.

Однако это не похоже на пакет OSGi... поэтому вам придется завернуть.

person Renato    schedule 05.09.2016
comment
Я добавил эту точную зависимость. Не исправить. Я так понимаю, что он ищет ›v2.1.0... как я уже сказал, 3.0 даже не существует. Я должен завернуть его? А, я вижу комментарий Клауса... попробую. - person djb; 07.09.2016
comment
Итак, особенности: установка заработала. Однако добавление зависимости не сработало. - person djb; 07.09.2016
comment
Итак, ваш фреймворк упаковывает банку за вас... Если вы сами обернули ее с помощью Bnd, Pax::wrap или плагина osgi-run gradle, это тоже сработает. - person Renato; 07.09.2016
comment
Я добавил ссылку на вопрос SO о том, как обернуть банки в пакеты OSGi. Для тех, кто использует Gradle, просто используйте osgi-run и он автоматически обернет банку для вас. - person Renato; 07.09.2016

Включите зависимость в features.xml, как показано ниже:

<bundle>mvn:org.beanio/beanio/${version}</bundle>

Затем введите команду features:refreshurl и установите пакет

person Prateek Mehta    schedule 07.09.2016