현상
Ubuntu 서버에서 maven을 설치하여 Java 애플리케이션을 빌드하던 중 아래와 같은 에러가 발생하면서 실패했다.
[[1;31mERROR[m] Error executing Maven.
[[1;31mERROR[m] java.lang.IllegalStateException: Unable to load cache item
[[1;31mERROR[m] Caused by: Unable to load cache item
[[1;31mERROR[m] Caused by: Could not initialize class com.google.inject.internal.cglib.core.$MethodWrapper
[[1;31mERROR[m] Caused by: Exception com.google.inject.internal.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 @365c30cc [in thread "main"]
원인을 확인하고 해결해본다.
원인
설치되어 있는 Java와 Maven이 서로 호환되지 않아 발생하는 에러라고 한다.
현재 설치되어 있는 java 버전과 maven 버전은 아래와 같다.
공식 문서(https://maven.apache.org/docs/history.html) 를 확인해보면 Java 17을 지원하는 maven 버전은 알파나 베타 버전 밖에 없는 것 같다. 그리고 설치되어있는 maven 3.6.0은 출시된지 너무 오래되어서 Java 17은 지원하지 못할 것 같다.
해결
Java 버전을 내리거나 Maven 버전을 올리는 방식으로 문제를 해결할 수 있다.
이 글에서는 서버 관리자가 Java 17이 아니라 Java 11을 새로 설치한 것으로 확인하여 Java 버전을 내리는 방법을 선택했다. 서버에 이미 Java 11이 설치되어 있었기 때문에 기본 사용 버전만 변경해주었다.
# 선택 가능한 버전 확인
update-java-alternatives --list
# 버전 변경
update-alternatives --config java
참고 문서
https://shanepark.tistory.com/389