0

首先,我知道在将现有的 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 使用或其他东西,尽管我以前不必处理这个问题,所以我不确定......

提前感谢您的帮助!

4

1 回答 1

0

似乎这个问题的答案很简单。我们需要做的就是<unpackBundle>true</unpackBundle>在配置下添加maven-bundle-plugin. 实际上,仅在特定的“eclipse”配置文件中执行此步骤似乎是不明智的。请参阅http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html#ApacheFelixMavenBundlePlugin%28BND%29-Unpackingbundlecontentsto%27target/classes%27了解为什么会这样。

于 2013-05-14T09:55:26.613 回答