Я пытаюсь оценить, уместно ли для нашего магазина использовать API поиска NetBeans без всей платформы NetBeans.
До сих пор мне удалось создать проект с этим кодом:
for (SomeInterface si : Lookup.getDefault().lookupAll(SomeInterface.class)) {
si.doSomething();
}
Я также создал пару других проектов, каждый с классом AnImplementation, реализующим SomeInterface, и сопровождающим файлом META-INF/services/path.to.SomeInterface, содержащим строку, ссылающуюся на класс (например, «other.path.to.AnImplementation» ).
Когда я добавляю эти реализующие проекты в библиотеки (зависимости) основного проекта в среде IDE NetBeans, все работает нормально, и я вижу последовательные результаты doSomething() из обеих реализаций.
Мой вопрос в том, как заставить это работать без ссылки на подпроекты в основном проекте; банки подпроектов не будут включены в сгенерированную банку основного проекта при сборке, и их можно будет добавлять или удалять по желанию, изменяя результат приведенного выше кода.
Если я не ошибаюсь, это поведение рекламируется в документации Lookup API. Заранее спасибо.
Изменить. На данный момент я пришел к выводу, что без платформы NetBeans (или OSGi?) невозможно определить, какие поставщики услуг присутствуют во время запуска. Вам нужно ссылаться на их банки в вашем пути к классам и, таким образом, идентифицировать их перед запуском. Не стесняйтесь доказывать, что я ошибаюсь.