0

OSGi では、バージョン番号とバージョン範囲を使用する場合、定義された依存関係の解決プロセス、つまりパッケージのインポートとエクスポートはかなり厳密です。バージョン 1.2.3 の一部のパッケージ インポートで、1.2.3 を含む範囲の対応するエクスポートが見つからない場合、バンドルを解決または開始できません。これはいい。

ただし、これはコア パッケージには適用されないようですorg.osgi.framework。Equinox (3.8.0) と Apache Felix (4.0.3) の両方の現在のバージョンはorg.osgi.framework,version=1.7.0、エクスポートされたパッケージの 1 つとして定義されます。ただし、このパッケージの特定の下位バージョンを必要とするバンドル (例: Import-Package: org.osgi.framework;version=1.3) は、引き続きこの新しいバージョンに解決されます。バンドルが解決されないことを期待します。

この動作はどのように説明できますか? これは OSGi 実装の誤動作ですか? コア OSGi パッケージを解決するときに例外がありませんか? または、Karaf がここで邪魔になっています (Apache Karaf でこれをテストしました。以下を参照してください)。

バージョンを明示的に宣言したくないこと、およびバージョンが完全に解決可能な範囲になることを知っています。ただし、そのようなインポートを定義する私の管理下にないバンドルがあります (つまり、iPOJO、以下を参照)。


セットアップの詳細: それぞれ Equinox または Felix を有効にして、Karaf 2.3.2 および 2.3.3 でこれをテストしました。私がテストに使用したデモ バンドルは githubで見つけることができます。これはそのままビルドでき、新しい Karaf コンテナーにデプロイすると失敗が表示されます。私がこれを発見した理由は、コア iPOJO バンドルが範囲ではなくそのような明示的なバージョンを定義しているためです。これを Karaf 機能記述子に追加し、Karaf Features Maven Pluginを使用して機能のエクスポート/インポートの整合性を検証しようとしましたが、失敗しました。

4

2 に答える 2

0

いいえ、OSGi でのパッケージのインポートは、別の方法で処理されます。OSGi は独自のサービスやコードを例外にすることはなく、完全に対称的です。

BJ が彼の回答で述べたように、バージョン X のインポートは、実際には X 以上のインポートです。

于 2013-10-01T06:52:56.007 に答える