Не удается запустить пакет оболочки OSGi в Eclipse; .jar строится нормально, но как мне копировать файлы в target/classes?

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

Бандл-файл для проблемного проекта на самом деле успешно строится со всеми зависимостями и соответствующими метаданными, сгенерированными и скопированными в него. Нерешенная проблема заключается в том, что каталог 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 или чем-то еще, хотя мне не приходилось сталкиваться с этим раньше, поэтому я не уверен...

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


person Elias Vasylenko    schedule 13.05.2013    source источник


Ответы (1)


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

person Elias Vasylenko    schedule 14.05.2013