パッケージをインポートすると、バンドルを要求するよりもさらにレベルの高い間接参照が提供されます。
いくつかの標準APIの場合を考えてみましょうorg.standard.framework
。2つの会社がこのAPIを実装していると仮定します。おそらく、バンドルcom.abc.framework
とcom.xyz.framework
。これらの実装バンドルは両方ともorg.standard.framework
パッケージをエクスポートします。
ここで、実装が必要であると仮定しますが、org.standard.framework
どれを特に気にする必要はありません。いずれかcom.abc.framework
またはcom.xyz.framework
バンドルが必要な場合は、特定の実装に縛られています。import-packageディレクティブを使用すると、OSGiを間接レイヤーとして機能させることができます。
import-packageのもう1つの利点は、パッケージを別のバンドルに移動した場合に依存関係を変更する必要がないことです。この状況は、バンドルが分割または結合されたリファクタリング中に発生する可能性があります。
これらの理由から、OSGi仕様の作成者は現在、require-bundleよりも比較的新しいimport-packageディレクティブを使用することを一般的に推奨しています。問題は、すべてのバンドルがこれに対応できるわけではないということです。多くの場合、パッケージをエクスポートするときにバージョンをまだ指定していません。これにより、多くの場合、インポートパッケージは実用的ではなくなります。