錯誤堆疊關鍵訊息
Caused by: java.lang.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext
...
Caused by: java.lang.ClassNotFoundException: org.hibernate.context.CurrentSessionContext
根因分析
CurrentSessionContext 介面在 Hibernate 3.x 存在,Hibernate 4/5 已移除/遷移至 `org.hibernate.context.spi.CurrentSessionContext`。
- 專案 `applicationContext.xml` 使用 `org.springframework.orm.hibernate3.LocalSessionFactoryBean`,暗示專案依賴 Hibernate 3。
- MyEclipse 2015 CI (Community/Integration 測試版) 內建的 Maven/類別路徑解析存在缺陷,導致 Hibernate 3 相關 jar 未正確納入部署類別路徑(WEB-INF/lib)。
解決方案
- 換用穩定版 IDE:MyEclipse 2015 Stable 3 或更新的 MyEclipse 2017/2019/202x 正式版,不再出現此類部署缺陷。
- 若必須留在 CI 版:手動將 `hibernate3.jar`、`hibernate-commons-annotations.jar` 等複製到 `WebRoot/WEB-INF/lib`,並確認專案建置路徑包含它們。
- 長期建議:升級至 Spring 4/5 + Hibernate 5,使用 `LocalSessionFactoryBean` (packages `org.springframework.orm.hibernate5`),並遷移至 Maven/Gradle 管理依賴,脫離 IDE 內建建置系統。
驗證步驟
# 在專案目錄執行
mvn clean package -DskipTests
# 檢查 target/xxx.war 中 WEB-INF/lib 是否包含 hibernate3.jar
結語
工具鏈的穩定性直接影響開發效率。遭遇 IDE 測試版特有的部署 Bug 時,果斷切換至正式版或採用標準化建置工具(Maven/Gradle)是止損最快的路徑。