首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Hibernate 5 缺少 jta.jar 導致 NoClassDefFoundError: javax/transaction/SystemException 解決

     編輯:程式設計綜合問答

錯誤堆疊核心

Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    ...
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:86)

Hibernate 5 啟動時靜態初始化 Configuration 類別,內部嘗試載入 JTA 相關類別,卻找不到 javax.transaction.SystemException。

根本原因

Hibernate 5 核心模組 不再內建 JTA API (javax.transaction:jta),需專案自行引入。Maven 中央倉庫坐標:

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>jta</artifactId>
    <version>1.1</version> <!-- 或 1.2 -->
</dependency>

Gradle:implementation 'javax.transaction:jta:1.1'

為什麼會在 Configuration 初始化時拋出?

org.hibernate.internal.CoreLogging.messageLogger 使用 JBoss Logging,後者在靜態區塊嘗試偵測 JTA 環境以啟用分散式事務支援,觸發 Class.forName("javax.transaction.SystemException"),找不到即拋出 NoClassDefFoundError。

驗證步驟

  1. 在 pom.xml / build.gradle 加入上述依賴。
  2. 執行 mvn clean compile 或 gradle clean build 刷新依賴。
  3. 重跑 JUnit 測試,錯誤應消失。

補充:若使用 Spring 管理 Hibernate

Spring 的 LocalSessionFactoryBean 會自動引入 spring-tx,後者傳遞依賴 javax.transaction:jta,通常不會缺包。純 Hibernate + JUnit 環境最容易遺漏。

總結

缺 jta.jar 是 Hibernate 5 常見坑,加入 javax.transaction:jta:1.1 即可解決。建議在專案模板/父 POM 中預設加入,避免新模組踩坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved