【问题标题】:java.lang.IllegalArgumentException referenced from a method is not visible from class loader从方法引用的 java.lang.IllegalArgumentException 在类加载器中不可见
【发布时间】:2018-05-22 10:15:16
【问题描述】:

我在 /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

【问题讨论】:

    标签: java spring-boot spring-boot-devtools


    【解决方案1】:

    由于它们是生成的类,您必须将它们从 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

    【讨论】:

    【解决方案2】:

    如果这不会影响您的应用程序,或者直接删除 Spring Dev Tools 依赖项:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多