在將 Spring Java 專案部署到 Tomcat 7 時,啟動過程中拋出嚴重錯誤:java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory。錯誤堆疊顯示 Spring 的 ContextLoaderListener 初始化失敗,根本原因是 ClassNotFoundException: org.apache.commons.logging.LogFactory。此外,還有自定義監聽器 usc.util.RepairListener 拋出 NullPointerException,導致上下文啟動失敗。
錯誤訊息明確指出缺少 org.apache.commons.logging.LogFactory 類別。這通常是因為專案的類別路徑中缺少 commons-logging 相關的 JAR 包。Spring 框架依賴 Apache Commons Logging 作為日誌抽象層,若缺少此依賴,Spring 容器無法初始化。
次要錯誤 RepairListener.contextInitialized 的空指針異常,往往是因為 Spring 容器初始化失敗,導致相關 Bean 未正確注入,進而引發連鎖反應。
org.apache.commons.logging.LogFactory 位於 commons-logging-x.x.jar 中。請檢查專案的 WEB-INF/lib 目錄或 Maven/Gradle 依賴配置,確保已包含該庫。pom.xml 中添加:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version> <!-- 或更新版本 -->
</dependency>
commons-logging.jar 並放入 WEB-INF/lib。work/Catalina/localhost/專案名),重新啟動伺服器並部署專案。NoClassDefFoundError,且 Spring 容器成功啟動,自定義監聽器也不再拋出空指針異常。有人誤以為 LogFactory 屬於 commons-lang 包,實際上它屬於 commons-logging。在 IDE 中可使用 Ctrl+Shift+T(Eclipse)或 Ctrl+N(IntelliJ IDEA)搜尋類別所在 JAR,快速定位。
Spring 專案在 Tomcat 部署時出現 NoClassDefFoundError: org/apache/commons/logging/LogFactory,核心原因是缺少 commons-logging.jar。補全該依賴後,重新部署即可解決問題。建議使用 Maven/Gradle 管理依賴,避免手動維護 JAR 帶來的版本衝突或遺漏。