반응형
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>
위 두 가지 설정 중 하나를 선택해서 사용하면 된다.
반응형
'Study > Java' 카테고리의 다른 글
Jasypt 암복호화 하기 (1) | 2019.03.01 |
---|---|
에러 로그를 웹에서 json으로 호출해서 확인하기 (logback appender 만들기) (0) | 2019.01.22 |
Spring Boot log 설정하기 (0) | 2019.01.09 |
Spring Cloud Config Server 사용하기 (0) | 2019.01.03 |
Spring Data Mongodb 사용해보기 (0) | 2018.12.24 |
Spring Boot multi module, multi profile 환경에서 @PropertySouce 사용하기 (0) | 2018.12.10 |
STS 4.0.0 이후 java, properties 에디터에서 ctrl + space (content assist) 가 동작하지않는 경우 (0) | 2018.12.06 |
Spring Boot Mongodb reactive 설정하기 (0) | 2018.12.03 |
빌드 시 constructor ... already defined in class 에러가 발생하는 경우 (0) | 2018.11.28 |
JDK 11 New Features (0) | 2018.11.22 |