java.lang.IllegalArgumentException, на который ссылается метод, не отображается в загрузчике классов
Я получил исключение, когда сгенерировал заглушку для службы WS с помощью wsimport в /target/class/..... и запустил приложение весенней загрузки с помощью devtools.
Вызывается: java.lang.IllegalArgumentException: com.... Служба, на которую ссылается метод, не видна из загрузчика классов.
Я обнаружил, что проблема с загрузчиком классов Spring devtools, RestartClassLoader, из-за двух разных ссылок на класс (RestartClassLoader и AppClassLoader)
private static void ensureVisible(ClassLoader ld, Class<?> c) {
Class<?> type = null;
try {
type = Class.forName(c.getName(), false, ld);
} catch (ClassNotFoundException e) {
if (type != c) {
throw new IllegalArgumentException(c.getName() +
" referenced from a method is not visible from class loader");
}
}
}
Я пытался добавить ссылку на файл jar в spring-devtools.properties, чтобы перезапустить.include = /..... jar
Spring Boot 2.0.0. ВЫПУСК Java 9
2 ответа
Поскольку они являются сгенерированными классами, вы должны исключить их из загрузчика классов Spring Devtools.
- Создать
/src/main/resources/META-INF/spring-devtools.properties
файл Добавить свойства как
restart.exclude.*
исключить классы из перезапуска загрузчика классов (например, вы можете использоватьrestart.exclude.mygeneratedclasses=/*[generated]*.class
исключить все классы сgenerated
слово как часть названия пакета или класса)Готово. Теперь вы можете использовать devtools и не иметь проблем с классами, сгенерированными WS.
Ссылка:
[1] https://github.com/spring-projects/spring-boot/issues/4529
[2] https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html
Или просто удалите зависимость Spring Dev Tools, если это не повлияет на ваше приложение:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>