source

Java 클래스 캐스트 예외 - 스프링 부트

ittop 2023. 7. 21. 21:55
반응형

Java 클래스 캐스트 예외 - 스프링 부트

Exception in thread "main" java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.base/java.net.URLClassLoader

 at org.springframework.boot.devtools.restart.DefaultRestartInitializer.getUrls(DefaultRestartInitializer.java:93)
 at org.springframework.boot.devtools.restart.DefaultRestartInitializer.getInitialUrls(DefaultRestartInitializer.java:56)
 at org.springframework.boot.devtools.restart.Restarter.<init(Restarter.java:138)
 at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:537)
 at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartedEvent(RestartApplicationListener.java:68)
 at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:45)
 at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166)
 at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
 at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:121)
 at org.springframework.boot.context.event.EventPublishingRunListener.started(EventPublishingRunListener.java:63)
 at org.springframework.boot.SpringApplicationRunListeners.started(SpringApplicationRunListeners.java:48)
 at org.springframework.boot.SpringApplication.run(SpringApplication.java:304)
 at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
 at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
 at com.rme.hub.RmeApplication.main(RmeApplication.java:24)

의 존재로 판단하면java.base/jdk.internal.loader.ClassLoaders스택 추적에서 Java 9 이상을 사용하고 있습니다.스프링 부츠DefaultRestartInitializer앱 클래스 로더를 에 캐스팅하려고 합니다.URLClassLoader이 기능은 Java 8 이전 버전에서는 작동하지만 Java 9 이상에서는 작동하지 않습니다.Spring Boot은 Java 9의 이러한 변화에 대응하기 위해 2.0에서 업데이트되었습니다.

Java 9 이상에서 Spring Boot를 사용하려면 Spring Boot 2로 업그레이드해야 합니다.작성 시점의 최신 릴리스는 Java 8, 9 및 10을 지원하는 2.0.5입니다.올해 말에 출시될 스프링 부트 2.1은 자바 11에 대한 지원을 추가할 것입니다.

저는 일식에 이 문제를 겪었고 다음 단계를 수행하여 해결했습니다.

  • 먼저 Java 8을 다운로드한 다음 설치합니다(없는 경우).
  • 두 번째, 해야 하는지 말아야 하는지는 잘 모르겠지만 그냥 하세요.JAVA_를 만듭니다.내 바탕화면에 대한 오른쪽 클릭에 의한 HOME 경로 -> 속성 -> 고급 시스템 설정 -> 고급 탭 -> 환경 변수 -> JAVA 추가_사용자 변수와 시스템 변수 모두에서 HOME -> 신규 클릭 -> 변수 홈은 "JAVA_HOME"이며, 변수 값은 비워둘 수 있습니다. -> 디렉토리 찾아보기 -> jdk 폴더를 가리킵니다(예: 내 것은 C:\Program Files\Java\jdk1.8.0_291).
  • 셋째, eclipse로 이동 -> 창 탭으로 이동 -> 왼쪽 메뉴에서 java 선택 -> 설치된 JREs -> 기본 eclipse에서 jre 디렉토리를 이미 가지고 있음 -> 클릭한 다음 duplicate -> 디렉토리를 자신의 jre 디렉토리로 변경을 클릭합니다(예:C:\Program Files\Java\jre1.8.0_291)
  • 네 번째로: java 메뉴로 돌아가 컴파일러 옵션 ->를 선택한 다음 오른쪽에서 컴파일러 준수 수준을 1.8로 변경합니다.

그게 다야!그것이 당신에게 유용하기를 바랍니다.


솔루션: IDE에서 JDK 버전 8 변경



IntelliJ 아이디어와 sts의 스프링 부트 애플리케이션에서 동일한 문제가 발생했지만 해당 문제에서 한 가지 해결책을 찾았습니다.

만약 당신이 당신의 프로젝트에 AD 통합을 사용하고 있고 그것이 Microsoft에 속해 있다면, 당신은 Java 8 버전 JDK를 사용해야 합니다. 왜냐하면 현재 Microsoft AD 플러그인은 Java 9 이상 버전을 지원하지 않기 때문입니다.

.sh .HOME in hadoop-env.sh . 8을 하는 $HAADOop_HOMEJAVA 변_HOME 값 (JAVA 8 $HAOop_HOME/etc/hadoop 값 HOME 경 (export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64.sh의 ) 은 me.hadoop-env.sh 의 경우 이 는 제 더높은 자바 버되있었다니습어의에 .hadoop-env.sh파일에 입니다.bashrc 파일에 Java 8을 정의했을 때의 값입니다.그래서 같은 자바 8 버전을 유지하는 것이 저에게 문제를 해결했습니다.

언급URL : https://stackoverflow.com/questions/52385610/java-class-cast-exception-spring-boot

반응형