2013-05-13 1 views
0

Прежде всего, я знаю, что было задано несколько вопросов об обертке существующих зависимостей Maven в виде пакетов OSGi, но у меня есть проблема, которую я не вижу непосредственно в одном из этих ответов ...Не удается запустить пакет обертки OSGi в Eclipse; .jar строится хорошо, но как я также копирую файлы в целевые/классы?

Банковский пакет для проблемного проекта фактически строится успешно, со всеми зависимостями и соответствующими метаданными, сгенерированными и скопированными в него. Непонятная проблема заключается в том, что каталог target/classes остается пустым, кроме META-INF/MANIFEST.MF, что означает, что запуск пакета в Equinox в составе конфигурации запуска OSGi из Eclipse не работает.

Я знаю, что сам .jar в target построен правильно, так как после копирования его содержимого в target/classes вручную я могу запустить его, и все работает так, как ожидалось.

<plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.4.0-SNAPSHOT</version> 
     <extensions>true</extensions> 
     <configuration> 
     <instructions> 
      <Export-Package></Export-Package> 
      <Private-Package>*</Private-Package> 
      <Require-Capability>osgi.extender; filter:="osgi.extender=osgi.serviceloader.registrar)"</Require-Capability> 
      <Provide-Capability>osgi.serviceloader; osgi.serviceloader=javax.script.ScriptEngineFactory</Provide-Capability> 
      <Import-Package></Import-Package> 
      <Embed-Transitive>true</Embed-Transitive> 
      <Embed-Dependency>*;scope=runtime|compile;inline=true</Embed-Dependency> 
      <Service-Component>*</Service-Component> 
      <_dsannotations>*</_dsannotations> 
     </instructions> 
     <archive> 
      <addMavenDescriptor>true</addMavenDescriptor> 
     </archive> 
     </configuration> 
    </plugin> 

важные линии бытия, я полагаю:

  <Embed-Transitive>true</Embed-Transitive> 
      <Embed-Dependency>*;scope=runtime|compile;inline=true</Embed-Dependency> 

Кто-нибудь знает другого способа упаковки OSGi расслоения в проектах Maven таким образом, что все копируется в target/classes, а также расслоения баночке? Или способ попросить конфигурацию запуска Eclipse искать сам .jar, а не искать в этом каталоге?

Мысль только что пришла в голову, что это может быть разрешено как хакерский пост-построенный шаг Maven для извлечения банки в target/classes, хотя это явно далеко от идеала. Возможно, я мог бы использовать профили, чтобы ограничить его использованием Eclipse или чем-то еще, хотя мне не приходилось иметь дело с этим раньше, поэтому я не знаю ...

Заранее благодарим за любую помощь!

ответ

0

Кажется, ответ на это очень прост. Все, что нам нужно сделать, это добавить <unpackBundle>true</unpackBundle> под конфигурацию maven-bundle-plugin. На самом деле кажется, что даже не разумно выполнять этот шаг только в конкретном профиле «затмения». См. http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html#ApacheFelixMavenBundlePlugin%28BND%29-Unpackingbundlecontentsto%27target/classes%27 для объяснения причин этого.