Может ли java.util.ServiceLoader найти новые jar-файлы, добавленные в classpath без перезапуска? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть Java-приложение, которое реализовано для поиска поставщиков интерфейса с помощью java.util.serviceLoader. Когда я добавляю новый jar провайдера во время выполнения в classpath приложения, приложение не находит его. Если я перезапускаю приложение, приложение находит провайдер jar. Есть ли какие-либо варианты для java-приложения, чтобы найти jar провайдера во время выполнения, так как я думаю, что именно это и должен делать java serviceLoader.

Я следую инструкциям на этой странице. http://cr.openjdk.java.net/~mr/jigsaw/spec/api/java/util/ServiceLoader.html Развертывание поставщиков услуг на пути к классам

1 Ответ

0 голосов
/ 22 февраля 2019

Объяснение можно найти здесь Создание расширяемых приложений (в конце урока):

Ограничения API ServiceLoader ServiceLoader API полезен, но имеет ограничения. Например, невозможно извлечь класс из класса ServiceLoader, поэтому вы не можете изменить его поведение. Вы можете использовать пользовательские подклассы ClassLoader, чтобы изменить способ поиска классов, но сам ServiceLoader не может быть расширен. Кроме того, текущий класс ServiceLoader не может сообщить вашему приложению, когда новые поставщики доступны во время выполнения. Кроме того, вы не можете добавить прослушиватели изменений в загрузчик, чтобы узнать, был ли новый поставщик помещен в каталог расширений конкретного приложения.

Кажется, применимо к Java 8. Не знаю, изменилось ли это в более поздних выпусках.

...