首先,我知道在将现有的 Maven 依赖项包装为 OSGi 包之前已经问过很多问题,但是我有一个问题,我没有看到在任何这些答案中直接解决......
有问题的项目的包 jar 实际上已成功构建,所有依赖项和适当的元数据都已生成并复制到其中。突出的问题是target/classes
除 之外的目录仍然是空的META-INF/MANIFEST.MF
,这意味着在 Equinox 中启动捆绑包作为从 Eclipse 中的 OSGi 运行配置的一部分不起作用。
我知道 .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>
有谁知道在 Maven 项目中包装 OSGi 包的另一种方法,以便将所有内容target/classes
以及包 jar 复制到其中?或者是一种让 Eclipse 运行配置查找 .jar 本身而不是在这个目录中查找的方法?
我突然想到,这可能可以作为一个 hacky post-build Maven 步骤将 jar 提取到 中来解决target/classes
,尽管这显然远非理想。也许我可以使用配置文件将其限制为 Eclipse 使用或其他东西,尽管我以前不必处理这个问题,所以我不确定......
提前感谢您的帮助!