外部 jar を介してインターフェイスの実装を提供する最も簡単な方法が必要です。クラスまたはインターフェイス名がリファクタリングされたときにエラーが発生する可能性があるため、text/xml ファイルの使用は避けたいと考えています。
宣言的な方法で実装を登録することになっている@ServiceProvider アノテーションがあるため、Netbeans Lookup を試しました。
そこで、インターフェイスとプロバイダーを異なる jar に分割することさえしない簡単な試用コードを作成しましたが、それでもコンポーネントの検索に失敗します。
import org.openide.util.Lookup;
import org.openide.util.lookup.ServiceProvider;
public class LookupTrial {
public static void main(String[] args) {
IService s = Lookup.getDefault().lookup(IService.class);
if(s==null)
throw new RuntimeException("lookup failed");
else
s.hello();
}
public interface IService{
public void hello();
}
@ServiceProvider(service=IService.class)
public class MyImplementation implements IService{
public MyImplementation(){}
@Override
public void hello() {
System.out.println("hello lookup");
}
}
}
ルックアップを間違って使用していますか? やりたいことを行うには、別のルックアップ ライブラリを検索する必要がありますか?