从方法引用的java.lang.IllegalArgumentException在类加载器中不可见

Але*_*ров 8 java spring-boot spring-boot-devtools

当通过/ target / class / .....中的wsimport为WS服务生成存根时,并使用devtools运行spring boot应用程序时,我获得了异常。

由以下原因引起: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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图在spring-devtools.properties中添加对jar文件的引用以重新启动.include = / ..... jar

Spring Boot 2.0.0.RELEASE Java 9

小智 10

由于它们是生成的类,因此您必须将它们从Spring Devtools“重新启动”类加载器中排除。

  1. 建立/src/main/resources/META-INF/spring-devtools.properties档案
  2. 添加属性,例如restart.exclude.*从重启类加载器中排除类(例如,您可以使用restart.exclude.mygeneratedclasses=/*[generated]*.class排除generated单词作为包或类名的一部分的所有类)

  3. 做完了 现在,您可以使用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#using-boot-devtools-customizing-classload