Я нашел решение, которое может работать в некоторых ситуациях. Вместо ServiceLoader
я использую класс / библиотеку org.openide.util.Lookup
, поставляемую с NetBeans - это расширенный набор ServiceLoader
. Он не требует самого NetBeans и, похоже, работает нормально с Eclipse. Необходимо заменить все функции ServiceLoader
, которые вы используете в своем приложении, на эквиваленты Lookup и добавить библиотеку org-openide-util-lookup. Затем вы можете просто сделать что-то вроде этого:
Lookup lookup = new ProxyLookup(Lookup.getDefault(),
Lookups.metaInfServices(myClass.getClassLoader(), "services/"));
И переместите ваши ServiceLoader
файлы из META-INF / services / в services /.
Обратите внимание, что из-за ProxyLookup
он будет продолжать работать в стандартных средах Java без изменений (т. Е. В этих случаях он будет продолжать искать в META-INF / services).
Вот ссылка на документацию для библиотеки: http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/lookup/Lookups.html
UPDATE
После работы с этим в течение нескольких дней он, кажется, работает хорошо - я перемещаюсь между средами (стандартными Java и Android), и он работает правильно в каждом месте. Основным недостатком является необходимость вручную копировать файлы в каталог / services.