NetBeans プラットフォーム全体を使用せずに NetBeans Lookup API を使用することが当店にとって適切かどうかを評価しようとしています。
これまでのところ、このコードでプロジェクトを作成することができました:
for (SomeInterface si : Lookup.getDefault().lookupAll(SomeInterface.class)) {
si.doSomething();
}
また、いくつかの他のプロジェクトを作成しました。それぞれに SomeInterface を実装する AnImplementation クラスと、クラスを参照する行を含む付随ファイル META-INF/services/path.to.SomeInterface があります (例: "other.path.to.AnImplementation")。 )。
これらの実装プロジェクトを NetBeans IDE のメイン プロジェクトのライブラリ (依存関係) に追加すると、問題なく動作し、両方の実装からの doSomething() の連続した結果を確認できます。
私の質問は、メイン プロジェクトのサブプロジェクトを参照せずにそれを機能させる方法です。サブプロジェクトのjarは、ビルド時にメインプロジェクトの生成されたjarに含まれず、自由に追加または削除して、上記のコードの結果を変更できます。
私が間違っていなければ、これはルックアップ API のドキュメントで宣伝されている動作です。前もって感謝します。
編集: 今のところ、私の結論は、NetBeans プラットフォーム (または OSGi ?) がなければ、起動時にどのサービス プロバイダが存在するかを検出できないということです。クラスパスでそれらの jar を参照する必要があるため、起動前にそれらを識別する必要があります。私が間違っていることを証明してください。