私は自分のアプリケーションに既製のOSGiバンドルをいくつか使用しています。まだOSGi互換ではない追加のパッケージと共に新しいバンドルに再パッケージしたいと思います。複数のOSGiバンドルをBND/Maven-BNDプラグインとマージするにはどうしたらいいですか?
ケースインポイントは、いくつかのOSGiバンドルとして利用可能なEclipseLinkです。ほとんどのものはオプションで、実行する内容によって異なります。私は、関連するバンドルを選び、データベースドライバ(MySQl JDBCコネクタなど)を追加し、それらを展開しやすい新しいバンドルに再パッケージしたいと思います。
Apache Felixのmaven-bundle-pluginを使用しています。私は、ソースコードなしで新しいMavenプロジェクトをセットアップ依存関係として4つのEclipseLinkとMySQLコネクタを追加し、次のことを試してみました:
- は1バンドル内のすべての依存関係を含めるように
<Embed-Dependency>
と<Embed-Transitive>
命令を使用します。問題:プラグインがマニフェストを書き換えるときに、eclipselinkバンドル(たとえば、javax.mail.internet)からのオプションの依存関係が必要になります。元のバンドルには、マニフェストに「resolution = optional」が含まれているため、うまく動作しません。 - プラグインの
manifest
ゴールを使用してください。これは基本的に同じ結果をもたらします。 - は、プラグインの目標を
bundleall
としました。これは別のバンドルを再度作成するため、私が望むものではありません。さらに悪いことに、これらのバンドルは内部に依存関係が存在しないためです。
私はこのことについて強迫観念になるだろう、とだけ別のサードパーティ製の束の全体の束と一緒に行くが、私はより多くのそれらをパッケージ化することができた場合ではないよStrutsの2と同様の問題に直面するつもりですきれいに、私は本当にしたいです。私は、OSGiのポイントがモジュール性であることを知っています。大きなバンドルを作成することはそれを打ち負かしてしまいますが、あなたのモジュールが緊密に結合されていれば、それらを単一のバンドルに入れることもできます。
もちろん、私はマニフェストを手動で調整することができますが、間違いなく欲しいと思います。
明確にするために、一連のOSGiバンドルと他のjarファイルのクラス、リソース、およびマニフェストの内容を1つにマージしたいとしますか? OSGi以外のjarファイルからも型を公開する必要がありますか? –
OSGiの一般原則と違うのですか?なぜ、バンドルされていないjarファイルをOSGifyしないで(やはりbndとmavenを使って)、組み込み依存ファイルではなく適切なバンドル依存ファイルとして使用してください。基本的には、すべてをバンドルに変換します。 – omerkudat
@リーチ売り手:うん、それは正しいです。実際には、私は元のバンドルよりもずっと少なくする必要があり、通常はOSGi以外のjarファイルからパッケージを1つだけ必要とします。たとえば、eclipselinkとdbドライバを1つのバンドルにまとめると、実際にはorg.eclipse.persistence.jpaをエクスポートするだけで、他のすべてはバンドル内で実行されます。 –