반응형
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
위 강좌 진행 중 프로젝트 세팅에서 아래와 같은 에러가 발생했습니다.
월 26, 2023 4:56:53 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
name: hello
...]
1월 26, 2023 4:56:53 오후 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.3.10.Final}
1월 26, 2023 4:56:53 오후 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
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 hellojpa.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
핵심 에러는 INFO: HHH000206: hibernate.properties not found로 하이버네이트의 속성을 찾을 수 없다는 에러입니다.
저의 경우 강좌와 달리 JDK 버전을 11로 진행했기에 생긴 에러로 JDK 11 버전부터는 JAXB 라이브러리가 기본적으로 포함되지 않아서 발생한 에러입니다.
제 문제와 별개로 세팅을 잘못한 경우에도 같은 에러가 발생할 수 있습니다.
포함되지 않는 라이브러리가 하이버네티스 종속성에 포함된 것이죠.
그렇기에 해결법은 아래와 JAXB 라이브러를 추가하면 됩니다. (강좌와 같은 메이븐 프로젝트 기준)
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
저의 경우 h2 데이터베이스를 2.1.214 버전을 사용해 전체 pom.xml은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>ex1hellojpa</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2데이터베이스, pc에 설치하면 H2와 같은 버전을 설치 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
<!-- JDK 11 환경에서 JPA를 실행시키면 에러가 생기므로 별도로 추가-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
</project>
참고로 JAXB란 자바 클레스를 XML로 표현하는 자바 API입니다, 표현하기 위해 자바 객체를 XML로 직렬화하는 기능과 반대로 XML을 자바 객체로 역직렬화하는 기능을 가지고 있습니다.
XML을 안쓰고 JSON을 쓰게 되면서 사장된 것이 아닐까 추측해 봅니다.
반응형
'Java > Error' 카테고리의 다른 글
[Intellij + Spring boot] Execution failed for task ':compileJava'.> invalid source release: 11 에러 대처 (0) | 2022.10.25 |
---|