java.lang.IllegalArgumentException, на который ссылается метод, не отображается в загрузчике классов - PullRequest
0 голосов

Я получил исключение, когда сгенерировал заглушку для службы WS с помощью wsimport в / target / class / ..... и запустил приложение весенней загрузки с помощью 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 в spring-devtools.properties для restart.include = /..... jar

Spring Boot 2.0.0.RELEASE Java 9

1 Ответ

0 голосов
/ 07 июня 2018

Поскольку они являются сгенерированными классами, вы должны исключить их из загрузчика классов "Restart" 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

...