파란하늘의 지식창고
반응형

JDK 9나 10에서 프로젝트 실행 시 아래와 같은 오류가 나게 되는 경우가 있다.

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBContext

Java EE 모듈과 CORBA 모듈이 Deprecated 되면서 기본 참조가 되지 않아 발생한 문제였다.

내가 직접 쓰지 않더라도 사용하고 있는 오픈소스 라이브러리가 참조하고 있으면 발생하게 된다.

(내 경우 spring cloud의 neflix eureka 라이브러리 쪽이 java.xml.bind 모듈을 참조하고 있었다.)

하지만 Deprecated 명시가 되어 있고 아직 라이브러리가 제거되지 않은 상태여서 --add-modules JVM 옵션만 추가하면 사용이 가능했다.

java jar --add-modules java.xml.bind application.jar

JDK 11 이 되면서 Java EE와 CORBA Module이 제거되었다. (JEP 320)

그래서 위와 같이 --add-modules를 사용하면 아래와 같이 에러가 발생하고 실행이 되지 않는다.

Error occurred during initialization of boot layer
java.lang.module.FindException: Module java.xml.bind not found

해당 모듈을 아예 사용하지 않으면 좋겠지만 당분간 써야 할 수밖에 없는 경우 아래처럼 dependency 참조를 해야 한다.

<dependency>
	<groupId>javax.xml.bind</groupId>
	<artifactId>jaxb-api</artifactId>
	<version>2.3.1</version>
</dependency>
<dependency>
	<groupId>com.sun.xml.bind</groupId>
	<artifactId>jaxb-core</artifactId>
	<version>2.3.0.1</version>
</dependency>
<dependency>
	<groupId>com.sun.xml.bind</groupId>
	<artifactId>jaxb-impl</artifactId>
	<version>2.3.1</version>
</dependency>

Spring boot를 사용하는 경우 다른 dependency를 안내하고 있고 boot dependencies에 참조되어 있다.

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9-and-above

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
</dependency>

위 두 가지 설정 중 하나를 선택해서 사용하면 된다.

반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요