오류 :
java.lang.IllegalAccessError: class NiceID.Check.CPClient ... 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
즉, Java 9 이상(JDK 17 포함)부터 com.sun.crypto.provider 패키지가 java.base 모듈 내부로 숨겨져서, 외부 코드(NiceID 라이브러리)가 직접 접근할 수 없습니다.
NiceID의 CPClient가 옛날 방식으로 이 내부 클래스를 사용하고 있어서 발생하는 거죠.
Eclipse + eGovFrame + Tomcat 9 환경에서 --add-exports 옵션 영구 적용하기
Eclipse + eGovFrame에서 Tomcat 실행 시 Arguments 탭의 VM arguments가 수정되지 않는 경우, 서버 런치 설정 대신 Tomcat 서버 설정 파일(catalina.bat) 또는 eclipse.ini를 수정해야 합니다.
1. 왜 수정이 안되나?
eGovFrame이 제공하는 내장 서버 설정은 기본 런치 구성을 잠가둠.
따라서 Eclipse에서 직접 수정해도 저장이 되지 않거나 재시작 시 초기화됨.
2. 영구 적용 방법
(1) Tomcat 실행 스크립트 수정 (Windows 예시)
TOMCAT_HOME/bin/catalina.bat 파일 열기
JAVA_OPTS 설정 부분 찾기. 예시 구조:
if not "%JSSE_OPTS%" == "" goto gotJsseOpts set "JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048" :gotJsseOpts set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%" rem Register custom URL handlers rem Do this here so custom URL handles (specifically 'war:...') can be used in the security policy set "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
위 set "JAVA_OPTS=..." 구문에 아래 옵션 추가:
set "JAVA_OPTS=%JAVA_OPTS% --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED -Dfile.encoding=UTF-8"
기존 옵션 뒤에 추가하면 기존 설정을 유지하면서 --add-exports 적용 가능
(2) Eclipse 외부 Tomcat 설정 사용
eGovFrame에서 Servers 뷰 → 기존 Tomcat 서버 삭제
외부 Tomcat 설치 경로 지정하여 새 서버 추가
이제 Run Configurations → VM arguments에서 직접 수정 가능
(3) eclipse.ini에 추가 (전역 적용)
eGovFrame 설치 폴더에서 eclipse.ini 열기
-vmargs 아래에 옵션 추가:
--add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED -Dfile.encoding=UTF-8
모든 프로젝트에 동일하게 적용됨.
3. 권장 최종 VM arguments 예시
-Djava.awt.headless=true -Dfile.encoding=UTF-8 --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED
정리:
Eclipse 내부 서버 설정에서 VM arguments 수정이 불가하면 catalina.bat 또는 eclipse.ini 수정 필요
외부 Tomcat 런타임을 등록하면 VM arguments 자유롭게 변경 가능
댓글 ( 0)
댓글 남기기