Maven を使用して OSGi アプリケーションを開発する場合、主に 2 つのアプローチがあります。POM ファーストと MANIFEST ファーストです。
各方法の長所と短所を示す表の形式の回答を探しています。
より具体的には、それがどのように関連しているかについても知りたいです。
- ツールセットの成熟度
- ベンダーの独立性
- 開発のしやすさ (ツールの開発ができる人を見つけることを含む)
- 互換性
- ClassNotFound の回避
- 手作業の回避
Maven を使用して OSGi アプリケーションを開発する場合、主に 2 つのアプローチがあります。POM ファーストと MANIFEST ファーストです。
各方法の長所と短所を示す表の形式の回答を探しています。
より具体的には、それがどのように関連しているかについても知りたいです。
現時点で思いつくのはこれくらい
POM-First Pros (maven-bundle-plugin を使用)
POMファーストの短所
ClassNotFoundException
実行時に発生する可能性が高くなります。ただし、これは pax-exam を使用して軽減できます (ただし、設定は非常に複雑です)。instructions
構成要素が正しく設定されていることを確認するために、MANIFEST がどのように設定されているかを理解する必要があります。MANIFEST ファーストの長所 (tycho-maven-plugin を使用)
ClassNotFoundException
、実行時ではなく JUnit テスト中に表示できます。マニフェスト優先の短所
すでに Maven を使用していて、OSGi に移行したい企業への推奨事項を求められた場合、最初に POMを選択します。
Eclipse プラグインの開発を行っている人に推薦を求められた場合、それはまずマニフェストです (tycho を使用)。
ユースケースで選ぶべきだと思います。サーバー側の OSGi プロジェクトでは、pom ファースト スタイルを好みます。Maven ビルドとうまく一致し、Manifest first よりもエラーが発生しにくくなっています。実際、maven バンドル プラグインの背後にある bnd は、追加の構成なしでほとんどの場合に適切なマニフェストを取得します。秘訣は、いくつかの命名規則を使用することです。たとえば、internal パッケージに impl または internal という名前を付けると、エクスポートされません。このスタイルを使用すると、Eclipse プラグインのパースペクティブを使用できなくなります (少なくとも、私が気に入らない bndtools がなければ) が、私はまだこのパースペクティブを見逃すことはありませんでした。私はこのスタイルを使用する Apache Karaf、CXF、および Camel プロジェクトの開発者であり、うまく機能しています。特に CXF と Camel の場合、OSGi と非 OSGi のデプロイメントを同じビルドとツールでサポートできるのは素晴らしいことです。
Eclipse RCP アプリケーションの場合、プラグイン パースペクティブと Eclipse IDE ツールが必要なため、まずマニフェストを使用します。それをmavenと組み合わせたい場合は、おそらくtychoが最適です。
MANIFEST は、最初に Eclipse に縛られることはありません (ただし、ごく少数の人が他のものを使用する場合は驚くでしょう)。MANIFEST は重要なファイルであり、その方法に関係なく、jar に追加する必要があります。
一方、POM は最初に Maven に完全にロックします。OSGi バンドルが任意の方法で作成できる通常の jar であるという利点が失われます。
私は両方を試しましたが、最初に MANIFEST の方が好きです。MANIFEST ファイルは非常に重要なファイルです。私は、そのファイルを生成するファイルを作成するよりも、そのファイルを作成することを好みます。何か奇妙なことが起こった場合 (そして、ある時点でそうなります) MANIFEST ファイルが最初にチェックされます。それが自分のファイルであれば簡単です。その上、とにかくそれに精通している必要があります。
そのため、Maven がアルファおよびオメガである場合は、まず POM が最適ですが、それでも MANIFEST ファイルを深く理解する必要があります。