JAVA·Spring

JDK9 이상에서 Module 문제, The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml

무한열정 2024. 8. 1. 17:57

■ 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과 관련된 문제가 무시되며 동작한다.