[Java/Intellij] Maven 프로젝트 에러 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException

febCho·2024년 6월 13일
0

오류 해결

목록 보기
14/19
post-thumbnail

문제

이클립스만 사용하다가 JPA를 배우며 처음으로 IntelliJ IDEA를 써봤는데, 메인 메서드를 실행하려니 아래와 같은 에러 메시지가 발생했다.

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 12 more

원인

찾아 보니 Java 9 이상 버전에서는 'javax.xml.bind' 패키지가 기본 JDK에서 제거되었기 때문이라고 한다. (현재 Java 17을 사용 중)

따라서 JAXB 라이브러리를 수동으로 추가해 주어야 Maven 또는 Gradle을 제대로 사용할 수 있다고 하며, Java의 XML 을 파싱할 수 있게 도와주는 역할을 담당한다고 한다.

요즘에는 JSON을 많이 사용해 주로 Jackson 라이브러리로 XML 파싱을 하기도 하지만, 아직까지는 Spring을 JPA에 접목하기 전인 만큼 에러에 따라 JAXB 라이브러리를 수동으로 pom.xml에 추가해 주기로 했다.

(의존성을 수동으로 추가하지 않고 JDK 모듈을 --add-modules 옵션을 사용해 추가하는 방법도 있다고 한다.)

해결

H2 데이터베이스 등 의존성이 추가되어 있는 <dependencies> 태그 하위에 아래 3가지 <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.2</version>
</dependency>

그리고 의존성을 새로 추가했으니 꼭 프로젝트를 다시 빌드해야 한다. 인텔리제이 기준으로 View > Tool Windows > Maven을 클릭, 화살표가 순환하는 모양의 Reload All Maven Projects를 눌러 변경사항들이 적용되게 해준다. 이렇게 하니 Main 메서드가 제대로 실행됐다.

- 관련 수업

[인프런] 자바 ORM 표준 JPA 프로그래밍 - 기본편 / 김영한

profile
Done is better than perfect.

0개의 댓글