2014-09-25 4 views
1

У меня возникли проблемы с расслоением проекта OSGi следующим образом:OSGi расслоения Импорт пакетов и Встраивание зависимостями

У меня есть классы, которые требуют использования JDOM. В настоящее время я работаю над проектом, когда я развертываю JDOM в виде отдельного пакета. Это расслоение экспортирует следующие пакеты:

org.jdom,version=1.0.0 
org.jdom.adapters,version=1.0.0 
org.jdom.filter,version=1.0.0 
org.jdom.input,version=1.0.0 
org.jdom.output,version=1.0.0 
org.jdom.transform,version=1.0.0 
org.jdom.xpath,version=1.0.0 

Теперь я хочу, чтобы изменить проект таким образом, что я включаю JDOM как Встроить-зависимость. Для этого я добавить зависимость к моему п файлам и установить следующее в конфигурации Maven-расслоение-плагин:

<plugin> 
<groupId>org.apache.felix</groupId> 
<artifactId>maven-bundle-plugin</artifactId> 
<extensions>true</extensions> 
<configuration> 
    <instructions> 
     <Bundle-SymbolicName>com.qnx.aem.cloudsite-bundle</Bundle-SymbolicName> 
      <Embed-Transitive>true</Embed-Transitive> 
      <Embed-Dependency>jdom</Embed-Dependency> 
    </instructions> 
</configuration> 
</plugin> 

После этого, когда я смотрю на наших проектах Bundle Manifest я вижу кучу новых импортных пакетов, требующей зависимости от JDOM-банки: jaxen, xerces и т. д.

Как на самом деле ранее развернутый пакет OSGi JDOM разрешил эти же зависимости? Они никогда не были перечислены в пакетах Packles Import Packages? Более того, если я попытаюсь включить их в качестве зависимостей проекта и внедрить их, это просто сочтет проблему. Помогите!

+0

Я предполагаю, что эти пакеты были импортированы в оригинальную jdom-банку с директивой «resolution: = optional» или они вообще не были импортированы. Не могли бы вы предоставить ссылку на jdom jar, который вы использовали? –

+0

Конечно, я использовал этот JAR: http://mvnrepository.com/artifact/jdom/jdom/1.0 –

+0

Я использовал эту версию пакета JDOM: http://ebr.springsource.com/repository/app/bundle/version/detail ? имя = com.springsource.org.jdom & версия = 1.0.0 –

ответ

0

Пакет, который вы используете, импортирует эти пакеты с «разрешением: = необязательно». По этой причине исходный пакет мог быть разрешен без наличия зависимостей в контейнере OSGi.

Я полагаю, что когда вы встроили зависимость, maven-bundle-plugin проанализировал байт-код встроенной зависимости вместо заголовка MANIFEST. Пакеты импортируются без директивы «resolution: = optional». Вы можете задать его снова в конфигурации Maven-расслоением-плагин, как это:

<Import-Package> 
    org.jaxen.*;resolution:=optional, 
    * 
</Import-Package> 

вопрос: Почему вы хотите, чтобы встроить банку, который уже работает OSGi расслоения? Лучше использовать его как есть.