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.properties
file Add properties like
restart.exclude.*
to exclude classes from restart classloader (example, you can userestart.exclude.mygeneratedclasses=/*[generated]*.class
to exclude all classes withgenerated
word 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