[JAVA] Unable to make protected final java.lang.Class 예외 해결
프로그램 실행 중 다음과 같은 예외를 마주했다.
// 예외 메시지
org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @7cb502c
아직 예외메시지를 잘 읽을 줄은 모르지만,
대충 java.lang 을 열 수 없어, java.lang에서 제공하는 클래스에 접근해서 생성할 수 없는 문제인가 싶었다.
구글링해서 해결 방법을 찾아보니,
자바 프로그램 실행 시, configuration 에 하단의 VM Option 을 추가하면 해결이 되는 것 같아 보였다.
--add-opens java.base/java.lang=ALL-UNNAMED
옵션을 추가하고 실행하면 문제 없이 프로그램이 작동된다.
나의 경우엔 java.lang 에 속한 클래스를 사용할 수 없었기 때문에
( module java.base does not "opens java.lang")
java.lang=ALL-UNNAMED 라는 옵션을 넣은 것이다.
만일 다른 패키지에 속한 클래스라면 위의 옵션을 조금 수정해야 할 것이다.
위 예외의 원인을 조금 더 찾아보았다.
Java 클래스를 직렬/역직렬화시, public 으로 선언한 필드에 대해서는 직렬/역질렬화를 제공하나 private 으로 선언된 필드에 대해선 접근할 수 없기 때문에 다음과 같은 에러가 발생했던 것이다.
참고
VM Option 추가
Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass 문제해
토비의 스프링 3.1 실습 도중 문제 DaoFactory 생성 후 이를 스프링으로 사용하기 위해 필요한 jar파일들을 넣고 변환하는 과정중 exception이 발생했다. 이클립스 버전 : 2021-09 Java 버전 : 17 에러 내용 Ex
lhc9138.tistory.com
에러 원인
[Error] Unable to make field private final java.time.LocalDate java.time.LocalDateTime.date accessible: module java.base does no
문제 발생코틀린으로 modelMapper로 Entity to DTO를 진행하던 중 “Unable to make field private final java.time.LocalDate java.time.LocalDateTime.date accessible: module
velog.io