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