Как работает Java ServiceLoader во время разработки? (Модульный тест перед сборкой JAR?) - PullRequest
3 голосов
/ 30 июня 2010

В ServiceLoader для Java эти записи должны присутствовать в файле JAR.Есть ли способ программно добавить эти записи службы во время выполнения для модульного тестирования, когда внутри IDE?Особенно, когда банки не построены.

1 Ответ

7 голосов
/ 30 июня 2010

Не зацикливайтесь на файлах JAR.Они являются предпочтительным способом инкапсуляции сервисов, но они не обязательны.Ключ действительно ClassLoader.getResources(String) - где String arg фактически становится ("META-INF/services/" + serviceClass.getName()).Еще один важный момент, о котором следует помнить: ServiceLoader.load(Class) использует загрузчик классов контекста (конечно, вы также можете использовать ServiceLoader.load(Class, ClassLoader)).Итак, что вам действительно нужно сделать, это манипулировать classpath или настроить загрузчик классов контекста таким образом, чтобы сделать ServiceLoader счастливым.

...