2016-03-30 6 views
0

Я пытаюсь развернуть пакет в apache-karaf 3.0.3, который содержит определенное количество сторонних файлов jar, которые я внедряю внутри, , поскольку файлы сторонних баннеров не являются OSGi расслоения. Из одного файла jar содержится оператор импорта в java-файле, который больше не существует в последней версии jar-файла (у меня не было olderversion файла jar).Ошибка при развертывании сторонних файлов jar в karaf

например: баночка файл 1 - Class1 - импорт com.java.test.io

При развертывании мое приложение сверток с файлами фляги я столкнулся ошибку.

Ошибка при выполнении команды: Ошибка при выполнении команды на пучках: Невозможно выполнить команду на пачке 391: Расслоение «com.test.example.bundle_0.1.0.SNAPSHOT [391]» не может быть решена. Причина: Отсутствует ограничение: Import-Package: com.java.test.io; version = "0.0.0"

Я пытаюсь воспроизвести сценарий с помощью простого java-приложения, он работает так, как ожидалось. Мое предположение заключается в том, что karaf сканирует все операторы импорта и проверяет, существует ли соответствующий экспортный пакет (разрешение на уровне пакета) существует для соответствующего импорта. Может кто-нибудь объяснить, почему приложение java работает, и в карафе это не удается?

pom.xml

<plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>mybundlename</Bundle-SymbolicName> 
         <Embed-Dependency>jar1,jar2,jar3,jar4</Embed-Dependency> 

        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
+0

Как вы строите свой комплект со встроенными файлами jar? – Ralf

ответ

0

Важно не импорт пакета в своем классе, но импорт пакета в манифесте Bundle в.

Если ваш код работает вне контейнера OSGi, то это означает, что импортируемый пакет не требуется во время выполнения в вашем конкретном сценарии использования. Или это вовсе не требуется и должно быть очищено.

Вам либо нужно развернуть комплект, чтобы удовлетворить импорт, либо вам нужно подавить добавление импорта com.java.test.io при создании вашего пакета. С плагином maven-bundle вы можете достичь этого так:

<instructions> 
    <Embed-Dependency>...</Embed-Dependency> 
    <Import-Package> 
     !com.java.test.io.*, 
     * 
    </Import-Package> 
</instructions> 
+0

@ Спасибо Ральфу. com.java.test.io пакет находится в стороннем файле jar. Можно ли исключить пакет из встроенного файла jar-файла зависимости. Также для файла non osgi jar нет ограничений (проверено путем развертывания банки в karaf). Поэтому он ожидает, что пакет будет на месте – Shriram

+0

@Shriram, да, например, если вы используете плагин mave-bundle-plugin, вы можете легко исключить пакеты из добавления в раздел импорта MANIFEST. Как вы строите свой комплект со встроенными сторонними JAR? – Ralf