2016-01-07 3 views
1

Я работаю над пакетом OSGi, в котором используется javax.ws.rs-api (2.0.1). У Karaf уже есть jsr311-api (1.1.1), загруженный как пучок. Когда я пытаюсь загрузить мой пакет OSGi, я вижу следующее исключение. Есть ли способ игнорировать ранее загруженный пакет?ClassCastException с пакетом OSGI

The activate method has thrown an exception 
java.lang.LinkageError: ClassCastException: attempting to castbundle://137.0:1/javax/ws/rs/ext/RuntimeDelegate.class to bundle://177.0:1/javax/ws/rs/ext/RuntimeDelegate.class 
    at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:146)[137:javax.ws.rs.jsr311-api:1.1.1] 
    at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)[137:javax.ws.rs.jsr311-api:1.1.1] 
    at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:95)[137:javax.ws.rs.jsr311-api:1.1.1] 
    at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)[137:javax.ws.rs.jsr311-api:1.1.1] 

ответ

0

Ваш комплект должен импортировать только нужные вам пакеты. Вы должны создать META-INF\MANIFEST.MF с заголовком Import-Package, который будет содержать список пакетов, требуемых только для версий.

Import-Package: javax.ws.rs.ext,version="2.0.1"

Список всех пакетов, которые вызывают конфликт. Я думаю, что здесь они:

javax.ws.rs,version="2.0.1" 
javax.ws.rs.client,version="2.0.1" 
javax.ws.rs.container,version="2.0.1" 
javax.ws.rs.core,version="2.0.1" 
javax.ws.rs.ext,version="2.0.1" 

Вы можете указать диапазон версий: [2.0.1, 3) и так далее.

Реальный пример:

Import-Package: org.osgi.service.blueprint; version="[1.0.0, 2.0.0)"

Вы можете использовать maven-bundle-plugin для создания requered MANIFEST.MF:

 <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.3.7</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
        <Bundle-Description>${project.description}</Bundle-Description> 
        <Import-Package> 
         javax.ws.rs;version=2.0.1, 
         javax.ws.rs.client;version=2.0.1, 
         javax.ws.rs.container;version=2.0.1, 
         javax.ws.rs.core;version=2.0.1, 
         javax.ws.rs.ext;version=2.0.1, 
         *, 
         org.apache.camel.osgi 
        </Import-Package> 
        <Export-Package> 
         your.package 
        </Export-Package> 
       </instructions> 
      </configuration> 
     </plugin> 

Не забудьте установить Bundle версии 2.0.1

 Смежные вопросы

  • Нет связанных вопросов^_^