ServiceProvider не найден в итерации ServiceLoader - PullRequest
0 голосов
/ 01 июля 2018

У меня есть проект, в котором необходимо использовать ServiceLoader, чтобы быть независимым от имплементаций.

Я хочу запустить MainApp в Eclipse с зависимостью Maven от (внешнего) Spi-файла с AProvider (метод объявления интерфейсаX) и Service (перебирая сервис-провайдеров). MainApp вызывает Service.methodX и должен получить результат от AProviderImpl, который находится во внешнем Sp.jar.

Sp.jar имеет зависимость Maven от Spi jar и, конечно, src / main / resources / META-INF / services / fullclassnameAProvider с полным именем класса AProviderImpl

Таким образом, зависимости похожи на MainApp -> Spi <-Sp А в репозитории Maven есть Spi.jar, Sp.jar и MainApp.ear </p>

Проблема заключается в том, что итерация для (Sp sp: ServiceLoader.load (AProvider.class)) в Service не находит какого-либо сервис-провайдера.

Я не хочу, чтобы Spi NOR MainApp знал о Sp по зависимости. Разве это не то, что ServiceLoader должен организовать? Нужно ли явно добавлять Sp в путь к классам MainApp, и если да, то как в Eclipse?

Или я ошибаюсь, предполагая, что Spi и Sp должны быть в состоянии разделиться? Я думаю нет или я?

Спасибо за внимание, Кендзи

1 Ответ

0 голосов
/ 01 июля 2018

Если вы предоставите SP область действия runtime, она будет использоваться только во время выполнения. Так или иначе: в конце SP должен быть на пути к классам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...