■ JDK9 이상에서 Module 방식에 의한 라이브러리 인식 문제
JDK9에서 Module이라는 개념이 도입되어 다음과 같은 오류가 발생할수 있다.
The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml |
■ 대응 방법 #1 (충돌 라이브러리 제거)
1) JDK의 해당 모듈과 충돌을 일으키는 jar 라이브러리를 찾아야 한다.
Linux 또는 macOS에서 다음 명령으로 대상 jar 라이브러리르 찾는다.
find ./ -type f -name '*.jar' | while read LINE; do echo $LINE;jar tvf $LINE | grep org.w3c.dom;done |
2) 대상이 되는 라이브러리가 발견되면 운영 프로젝트에서 제거해 준다.
./javax.xml_1.3.4.v201005080400.jar 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/bootstrap/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/css/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/events/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/html/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/ls/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/ranges/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/stylesheets/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/traversal/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/views/ 0 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/xpath/ 399 Mon Jan 24 22:06:00 KST 2011 org/w3c/dom/Attr.class 100 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/CDATASection.class 516 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/CharacterData.class 104 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/Comment.class 400 Mon Jan 24 22:06:00 KST 2011 org/w3c/dom/DOMConfiguration.class 433 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/DOMError.class 129 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/DOMErrorHandler.class 999 Mon Jan 24 22:06:00 KST 2011 org/w3c/dom/DOMException.class 515 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/DOMImplementation.class 163 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/DOMImplementationList.class 265 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/DOMImplementationSource.class 267 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/DOMLocator.class 185 Mon Jan 24 22:06:00 KST 2011 org/w3c/dom/DOMStringList.class 2059 Mon Jan 24 22:06:02 KST 2011 org/w3c/dom/Document.class |
■ 대응 방법 #2 (JDK8 이하로 빌드)
문제가 되는 프로젝트가 JDK9 이상에서 지원하는 기능이 없는 경우 간단히 해결 가능하다.
빌드 JDK를 "JDK8 이하로 맞추어 빌드"하여 class 파일 또는 jar파일을 만들어 준다.
이 경우 JVM은 하위 호환성을 철저히 지키기 때문에 해당 class 또는 jar의 컴파일 JDK 버전에 기반하여 동작하므로 Module과 관련된 문제가 무시되며 동작한다.
'JAVA·Spring' 카테고리의 다른 글
@Transactional Checked Exception 사용시 Commit 되는 이유 (0) | 2024.09.04 |
---|---|
GU(GraalVm Updater) 없는 경우 수동으로 Python(GraalPy) 추가하기 (0) | 2024.05.24 |
IntelliJ에서 Lombok 적용후 cannot find symbol symbol: class __ (0) | 2023.05.23 |
Spring Batch에서 ItemReadListener가 걸리지 않을 때 (0) | 2023.04.03 |
Kakao Login API Bad client credentials(KOE010) 해결하기 (0) | 2022.08.29 |