본문 바로가기

Back-End/SpringBoot

[SpringBoot/Java17] java 17 SunJCE 오류 해결(vm option 추가)

문제

신규 프로젝트에 java 17 버전을 적용하면서 java 11 버전을 사용할 때 문제 없이 썼던 모듈에서 아래와 같은 오류가 났다.

java.lang.IllegalAccessError:cannot access class com.sun.crypto.provider.SunJCE (in module java.base) because module java.base does not export com.sun.crypto.provider to unnamed module @0x4f209819

 

원인

모듈 공급사에 문의하니 java 11 이후부터 JCE가 기본적으로 load 되지 않아서 생긴 문제이며 아래 옵션을 추가해서 실행해보라는 답변을 받았다.

--add-exports java.base/com.sun.crypto.provider=ALL-UNNAMED

 

해결

edit configurations -> vm options 추가

 

+ build.gradle jib 코드에 vm option 추가하기

로컬에서만 발생하는 문제인 줄 알았는데 개발 서버 배포 후에도 같은 오류로 실행되지 않았다.

jib 컨테이너 실행문에 vm option을 추가해주었다.

jib {
    from {
        image = 'openjdk:17-alpine'
    }
    ...
    container {
        entrypoint = ['java', '--add-exports', 'java.base/com.sun.crypto.provider=ALL-UNNAMED', '-jar', 'api-1.0-SNAPSHOT.jar']
        jvmFlags = ['-Xms512m', '-Xmx512m', '-Xdebug', '-XshowSettings:vm', '-XX:+UnlockExperimentalVMOptions', '-XX:+UseContainerSupport']
        ...
    }
	...
}