code

자바.java.java잘못된 인수메서드에서 참조된 예외는 클래스 로더에서 볼 수 없습니다.

starcafe 2023. 7. 22. 10:17
반응형

자바.java.java잘못된 인수메서드에서 참조된 예외는 클래스 로더에서 볼 수 없습니다.

wimport in /target/class/...에서 WS 서비스에 대한 스텁을 생성하고 devtools를 사용하여 스프링 부팅 애플리케이션을 실행할 때 예외가 발생했습니다.

원인: java.lang.잘못된 인수예외: com...메서드에서 참조된 서비스가 클래스 로더에서 표시되지 않습니다.

클래스에 대한 두 가지 다른 참조(RestartClassLoaderAppClassLoader)로 인해 Spring devtools 클래스 로더인 RestartClassLoader에 문제가 있음을 발견했습니다.

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 파일에 참조를 추가하여 다시 시작하려고 했습니다.jar=/...jar

Spring Boot 2.0.0.Java 9 릴리스

생성된 클래스이므로 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

또는 Spring Dev Tools 종속성이 애플리케이션에 영향을 미치지 않는 경우에만 제거하십시오.

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

언급URL : https://stackoverflow.com/questions/50465170/java-lang-illegalargumentexception-referenced-from-a-method-is-not-visible-from

반응형