从类加载器中看不到从方法引用的java.lang.IllegalArgumentException

时间:2018-05-22 10:15:17

标签: 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");
        }
    }
}

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

  

Spring Boot 2.0.0.RELEASE Java 9

1 个答案:

答案 0 :(得分:4)

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

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

  3. 完成。现在您可以使用devtools并且对WS生成的类没有任何问题。

  4. 参考:

    [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