17

Maven を使用して OSGi アプリケーションを開発する場合、主に 2 つのアプローチがあります。POM ファーストと MANIFEST ファーストです。

各方法の長所と短所を示す表の形式の回答を探しています。

より具体的には、それがどのように関連しているかについても知りたいです。

  • ツールセットの成熟度
  • ベンダーの独立性
  • 開発のしやすさ (ツールの開発ができる人を見つけることを含む)
  • 互換性
  • ClassNotFound の回避
  • 手作業の回避
4

3 に答える 3

18

現時点で思いつくのはこれくらい

POM-First Pros (maven-bundle-plugin を使用)

  • 既存の Maven スキル、リポジトリ、およびツールを活用します。
  • pom.xml と一緒に MANIFEST.MF を使用するよりも、pom.xml を管理する方法を知っている人を見つけやすい可能性があります。
  • MANIFEST.MF のほとんどの情報は、pom.xml 自体から取得できます。
  • Eclipse ベースの IDE だけでなく、他の IDE でも使用できます。
  • 侵襲性が低く、単一のプラグインを追加し、パッケージの種類を「バンドル」に変更するだけです

POMファーストの短所

  • ClassNotFoundException実行時に発生する可能性が高くなります。ただし、これは pax-exam を使用して軽減できます (ただし、設定は非常に複雑です)。
  • instructions構成要素が正しく設定されていることを確認するために、MANIFEST がどのように設定されているかを理解する必要があります。

MANIFEST ファーストの長所 (tycho-maven-plugin を使用)

  • 推奨されるアプローチのように見えるか、少なくとも推奨されるアプローチとして話されているようですが、なぜそれが大きな利点があるのか​​ 本当にわかりません. (したがって、この質問が尋ねられた理由)。
  • Eclipse プラグインの開発に適しており、PDE とうまく統合できます
  • テスト用のツールを提供するためClassNotFoundException、実行時ではなく JUnit テスト中に表示できます。

マニフェスト優先の短所

  • Eclipse ベースの IDE でのみうまく動作するようです。Eclipse を使用する必要はありませんが、PDE がなければ使用したいと思いますか?
  • POM と MANIFEST.MF の名前とバージョンを同期させなければならないため、DRY の原則に違反します。
  • 特定の方法で物事に名前を付ける必要がある
  • 混在させることはできません。つまり、既存の Maven マルチプロジェクト インストールを OSGi サポートに追加することはできません。
  • 警告を少なくするには、maven-bundle-plugin と比較してより多くの構成が必要です: http://wiki.eclipse.org/Tycho/Reference_Card#Examplary_parent_POM
  • テスト ケースを別のプロジェクトにする必要があります。src/test/java にビルドすると実行されません。
  • 公開されているクラス、つまり「.internal.」にあるクラスのみをテストするようです。テストできません。

すでに Maven を使用していて、OSGi に移行したい企業への推奨事項を求められた場合、最初に POMを選択します。

Eclipse プラグインの開発を行っている人に推薦を求められた場合、それはまずマニフェストです (tycho を使用)。

于 2012-07-07T07:04:32.713 に答える
6

ユースケースで選ぶべきだと思います。サーバー側の 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が最適です。

于 2012-07-07T21:08:00.317 に答える
0

MANIFEST は、最初に Eclipse に縛られることはありません (ただし、ごく少数の人が他のものを使用する場合は驚くでしょう)。MANIFEST は重要なファイルであり、その方法に関係なく、jar に追加する必要があります。

一方、POM は最初に Maven に完全にロックします。OSGi バンドルが任意の方法で作成できる通常の jar であるという利点が失われます。

私は両方を試しましたが、最初に MANIFEST の方が好きです。MANIFEST ファイルは非常に重要なファイルです。私は、そのファイルを生成するファイルを作成するよりも、そのファイルを作成することを好みます。何か奇妙なことが起こった場合 (そして、ある時点でそうなります) MANIFEST ファイルが最初にチェックされます。それが自分のファイルであれば簡単です。その上、とにかくそれに精通している必要があります。

そのため、Maven がアルファおよびオメガである場合は、まず POM が最適ですが、それでも MANIFEST ファイルを深く理解する必要があります。

于 2012-07-07T08:42:24.107 に答える