2

javacなどのツールを使用してソースからバンドルを作成するには、線形クラスパスを提供する必要があります。残念ながら、OSGiの観点からはまだ完全に合法である状況では機能しません。

  • JARが埋め込まれた依存関係。

  • 異なる依存関係に含まれる同じパッケージ。

javacはOSGiメタデータを理解しないので、単純に理解することはできませんが、クラスパスの依存関係を理解することができます。より細かいパッケージのきめ細かいアプローチが必要と思われます。

自動化されたプロセス(継続的インテグレーション)でOSGiを使用している人々は、この問題にどのように対処しますか?不思議なことに、バンドルJARの作成方法(メタデータの作成、JARの作成)については、クラス/内部JARを内部に配置する方法について多くのリソースがありますが、実際にこれらのクラスをコンパイルする方法についてはほとんどありません。

例を見てみましょう。私のバンドルをコンパイルするには、他に2つのバンドルが必要です。どちらにもXercesが埋め込まれたJARとして含まれていますが、2つの異なる互換性のないバージョンがあります。そのうちの1つだけが、私のバンドルがインポートしているxercesのいくつかのパッケージをエクスポートするので、問題はありません。あまりクリーンな状況ではないかもしれませんが、OSGiコンテナで問題なく「合法的に」発生する可能性のある問題が発生します。

さて、どうすればコンパイルできますか?2つの依存関係をクラスパスに入れることができません(埋め込まれたXerces JARはjavacで見つかりません)、フラット化することもできません(2つのバージョンのXercesが衝突し、エクスポートされていないバージョンが最初になる可能性があります) 。唯一の解決策が、フルバンドルスケールではなくパッケージレベルで「クラスパス」を作成することである場合、javacはまったく使用できません。

4

2 に答える 2

0

Java クラスは javac によってコンパイルされます。つまり、バンドルをコンパイルするには、依存するすべてのバンドルをクラスパスに含める必要があります。javac が OSGi に対応していないことは間違いありません。したがって、自動化には他のツールが必要です。

これがどのように達成されるかを確認するには、OSGi R4 Service Platform を実装するFelixを調べることができます。

OSGi バンドルは通常、Eclipse でサポートされている ant または maven によってパックされます。Eclipse を使用すると、依存関係はプロジェクト設定タブの "plugin-dependencies" で構成されます。

Eclipse で OSGi プロジェクトをセットアップする方法の良い例は、Sherlog です。

于 2010-04-25T08:52:35.783 に答える
0

Java ファイルをクラスファイルに構築するには、Javac が必要です。OSGI バンドルは、他の Java バンドル アーカイブと同様に、クラス ファイルのコレクションと、JAR ファイル内のいくつかの必須の自明のエントリであるマニフェストです。

バンドルを正しく機能させたい場合は、すべての依存関係が満たされている必要があります。そのサービスまたはクラスの一部をエクスポートする場合は、これらも同様の方法で宣言する必要があります。概念を理解すると、アーカイブ内の OSGI 固有のヘッダーが理にかなっています。

于 2010-04-25T08:58:50.697 に答える