Мне нравятся услуги. Мне также нравится модульная система. К сожалению для меня, до того, как я использовал Java 9, я привык получать поставщиков услуг из jar-файлов, загружаемых во время выполнения через URLClassLoader
, что-то вроде этого (для краткости я буду использовать Java 10 var
):
var url = new File("myjar.jar").toURI().toURL();
var cl = new URLClassLoader(new URL[] {url}, getClass().getClassLoader());
var services = ServiceLoader.load(MyService.class, cl);
for (var service : services) {
...
}
Это прекрасно работает даже в Java 9 и более поздних версиях, но загружает банку в путь к классам, а это означает, что для поиска поставщиков услуг используется старый метод META-INF\services
. Я бы предпочел использовать метод module-info
, но для этого вместо этого требуется, чтобы jar загружался по пути модуля, но я не смог найти способ, которым я мог бы это сделать. Итак, я здесь, надеюсь, что кто-то из присутствующих здесь, кто лучше разбирается в модульной системе, скажет мне, как это можно сделать (или что нельзя, если это так).