Загрузка Java сервисов из других проектов / нескольких источников - PullRequest
0 голосов
/ 11 марта 2020

Я сейчас играюсь с Java ServiceLoader. Теперь моя проблема заключается в том, как загрузить Сервисы из нескольких проектов.

У меня есть один большой Maven-Project, и все реализации находятся в папке bundles. Теперь в ProjectA я хочу загрузить сервисы, которые находятся в Project B и / или Project C. В настоящее время я даже не могу загрузить Сервисы только из одного другого Проекта. Загрузка услуг из ProjectA работает, хотя. Я получаю сообщение об ошибке:

org.eclipse.swt.SWTException: Failed to execute runnable (java.util.ServiceConfigurationError: myPackageA.MyProvider: Provider myPackageB.myProviderImplementation not Found)

Caused by: java.util.ServiceConfigurationError: myPackageA.MyProvider: Provider myPackageB.myProviderImplementation not found

Моя структура папок выглядит следующим образом:

MainProject
|
|_ ...
|_ bundles
   |_ ProjectA
   |      |_ myPackageA
   |         |_ MyProvider
   |_ ProjectB
   |      |_ myPackageB
   |      |  |_ myProviderImplementation
   |      |_META-INF
   |         |_ services
   |            |_ myPackageA.MyProvider
  ...

Я пытался создать META-INF / services в пакетах, но это ничего не меняет ( то же сообщение об ошибке). Я могу получить доступ к Сервисам, которые я поместил в ProjectA, просто используя ServiceLoader.load (MyProvider.class). Но если я предоставлю ServiceLoader URL-ClassLoader, который указывает на «C: \ .. \ MainProject \ bundles \ ProjectB \, я получу сообщение об ошибке. (Это также не работает, если я указываю на ProjectA для загрузки сервисы оттуда.)

File loc1 = new File("C:\\..\\MainProject\\bundles\\ProjectB\\");
URL[] urls = new URL[] {loc1.toURI().toURL()};
URLClassLoader uClassLoader = URLClassLoader(urls);
ServiceLoader<MyProvider> analysisServices = ServiceLoader.load(MyProvider.class, uClassLoader);

Ранее я пытался использовать URL-ClassLoader для загрузки реализаций из jar, но это дало мне ClassPathError, поэтому я перестал пытаться после нескольких дней отладки.

...