チャド、あなたの質問により効果的に答えるために、いくつか知りたいことがあります: 1) 外部アプリケーションからサービス参照をどのように正確に取得していますか? 2) 外部アプリケーションはスタンドアロン アプリケーションですか、それとも別のコンテナー内にありますか? もしそうなら、それを実現する方法があります。
あなたが提起する質問は興味深いものです。それを文脈に入れましょう。外部アプリケーションによって Felix から OSGi サービスへの参照を取得できると仮定しましょう。このサービスを使用すると、インターフェイスを介して対話します。OSGi のそのインターフェースでは、インポート ステートメントが参照されます。このステートメントは、インターフェースのメソッド シグネチャおよび最終的な属性で使用されます。これらのインポート ステートメントには、 pom.xml ファイルで定義された、一致する依存ライブラリが含まれます。
外部アプリケーションでサービスを使用するには、インターフェースを含み、インターフェースの依存関係を参照する API ".jar" ファイルを公開する必要があります。外部アプリケーションはその API を使用する必要があり、.war、.jar、または .ear ファイルの lib ディレクトリにアセンブルされる可能性があります。このため、外部アプリケーションの依存関係が API の依存関係と競合することはありません。
API を使用できる限り、その通りです。SPI の依存関係は問題になりません。外部アプリで Spring 3.0.4.RELEASE を使用し、OSGi アプリケーションで Spring 2.5.6.SNAPSHOT を引き続き使用できます。API に外部アプリケーションと競合する依存関係がない限り、問題はありません。ここでの秘訣は、インターフェースを API として最小限の .jar ファイルに入れ、実装の詳細を SPI に入れる必要があるということです。外部 ap は API を使用し、OSGI 内部では API と SPI の両方を使用します。
これが役立つかどうか教えてください。