I obtained an exception when generated a stub for a WS service by wsimport in /target/class/….. and run a spring boot application with devtools.
Caused by: java.lang.IllegalArgumentException: com….Service referenced from a method is not visible from class loader
I found that an issue with spring devtools class loader, RestartClassLoader, because of two different references to a Class (RestartClassLoader and 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");
}
}
}
I was trying to add a reference to a jar file in spring-devtools.properties to restart.include=/…..jar
Spring Boot 2.0.0.RELEASE Java 9
Advertisement
Answer
Since they are generated classes you have to exclude them from Spring Devtools “restart” classloader.
- Create a
/src/main/resources/META-INF/spring-devtools.propertiesfile Add properties like
restart.exclude.*to exclude classes from restart classloader (example, you can userestart.exclude.mygeneratedclasses=/*[generated]*.classto exclude all classes withgeneratedword as part of package or class name)Done. Now you can use devtools and have no issues with WS generated classes.
Reference:
[1] https://github.com/spring-projects/spring-boot/issues/4529