まず第一に、既存の 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の使用などに制限することができますが、これまで対処する必要がなかったので、わかりません...
助けてくれてありがとう!