0

まず第一に、既存の Maven 依存関係を OSGi バンドルとしてラップすることについて、以前に多くの質問が寄せられたことを知っていますが、これらの回答のいずれにも直接対処されていない問題があります...

問題のあるプロジェクトのバンドル jar は、実際には正常にビルドされており、すべての依存関係と適切なメタデータが生成され、そこにコピーされています。未解決の問題は、target/classesディレクトリが を除いて空のままMETA-INF/MANIFEST.MFであることです。これは、Eclipse 内から OSGi 実行構成の一部として Equinox でバンドルを起動しても機能しないことを意味します。

.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>

target/classesバンドル jar だけでなくすべてがコピーされるように、Maven プロジェクトで OSGi バンドルをラップする別の方法を知っている人はいますか? または、このディレクトリを探すのではなく、.jar 自体を探すように Eclipse の実行構成に依頼する方法はありますか?

target/classesこれは明らかに理想からはほど遠いですが、これはjar を に抽出するためのハックなビルド後の Maven ステップとして解決できるかもしれないと思いました。おそらく、プロファイルを使用してEclipseの使用などに制限することができますが、これまで対処する必要がなかったので、わかりません...

助けてくれてありがとう!

4

1 に答える 1