들어가며
처음 Hiberate를 공부하며 맞이한 오류이기에 이렇게 기록으로 남겨 보려고 한다.
환경설정부터 오류가 나니 적잖이 당황스럽지만 조금의 구글링으로 원인을 파악할 수 있었다.
오류발생 환경
[ 오류 발생 환경설정 ]
- JDK 11
- Hibernate 5.3.7.Final
- H2 1.4.200
[ 변경한 환경설정 ]
- JDK 8
- Hibernate 5.3.7.Final
- H2 1.4.200
오류 내용 및 원인
원인을 찾아보니 JDK 11에서는 기존의 내장되어있던 JAXB가 사라지게 되었다. 만약 JDK 버전을 변경하지 않고 사용하시려면 별도의 JAXB 라이브러리를 추가하여 문제를 해결 할 수 있다.
아래는 오류에 대한 Stacktrace 이다.
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:86)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:212)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:174)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:76)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:171)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:119)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:61)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:50)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at com.bbubbush.jpa.JpaMain.main(JpaMain.java:9)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 12 more
반응형
마치며
JDK 11은 하위호환성을 열어두었던 코드들이 제거되기 시작한 버전이다. 특히 javax.xml.bind 패키지에서 발생하는 오류는 JDK 버전 문제일 가능성이 높다.
JDK 11로 버전업을 하는 경우나 다른 사람의 소스코드를 복사할 때, 본인이 JDK11을 사용한다면 이런 케이스를 제일 먼저 생각해보자.
참고 : JDK 버전에 따른 JAXB
'Development > Troubleshooting' 카테고리의 다른 글
org.h2.jdbc.JdbcSQLSyntaxErrorException 해결하기 (0) | 2023.04.01 |
---|---|
폐쇄망에서 K사 로그인API 적용 후기 (0) | 2020.06.14 |
[개발 Tip] Intellij에서 lombok을 인식하지 못하는 경우 해결방법 (0) | 2020.06.04 |
금액표시할 때 쉼표(,)찍는 방법 (0) | 2020.05.20 |