Java.lang.IllegalArgumentException, ссылающееся на метод, не видно из загрузчика классов

Александр Захаров спросил: 28 апреля 2018 в 08:35 в: java

Я получил исключение при создании заглушки для WS-сервиса с помощью wsimport в / target / class / ..... и запускает приложение загрузки Spring с помощью devtools.

Вызвано: 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");
        }
    }
}

Я пытался добавить ссылку на файл jar весной -devtools.properties для restart.include = / ..... jar

Spring Boot 2.0.0.RELEASE Java 9

1 ответ

Fernando Cappi ответил: 13 мая 2018 в 09:07

Поскольку они являются сгенерированными классами, вы должны исключить их из загрузчика классов "Перезагрузка" Spring Devtools.

  1. Создайте файл /src/main/resources/META-INF/spring-devtools.properties
  2. Добавьте такие свойства, как restart.exclude.*, чтобы исключить классы из перезапуска classloader (например, вы можете использовать restart.exclude.mygeneratedclasses=/*[generated]*.class, чтобы исключить все классы с generated) как часть имени пакета или класса ) литий> Готово. Теперь вы можете использовать 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# используя-загрузочные-DevTools-Customizing-classload