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

Spring AOP 啟動報 NoClassDefFoundError: LogFactory —— 缺失 commons-logging 依賴修復指南

     編輯:Java 綜合教學

錯誤堆疊

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.springframework.aop.framework.CglibAopProxy.<clinit>(CglibAopProxy.java:95)
    ...
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

根因

Spring 核心模組(spring-core、spring-aop)依賴 Commons Logging (JCL) 作為日誌門面。若項目未顯式引入 commons-logging,且未使用 SLF4J 等橋接器替代,類加載器找不到 LogFactory 類,拋出 NoClassDefFoundError。

解決方案

方案一:Maven 顯式添加(推薦)

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

方案二:使用 SLF4J + jcl-over-slf4j 替代(現代化)

將 JCL 重定向到 SLF4J,再由 Logback/Log4j2 實現,統一日誌體系:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>2.0.9</version>
</dependency>
<!-- 移除 commons-logging,防止雙重綁定 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.9</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.11</version>
</dependency>

方案三:Spring Boot 專案(通常無需手動處理)

spring-boot-starter 已傳遞依賴 spring-jcl(Spring 內部 JCL 實現),若仍報錯請檢查:

  • 是否排除了 spring-jcl?
  • 是否手動引入舊版 commons-logging 導致版本衝突?

驗證步驟

  1. 執行 mvn dependency:tree | grep commons-logging 確認版本唯一。
  2. 重新啟動應用,AOP 代理正常創建,錯誤消失。

最佳實踐建議

  1. 新項目首選 SLF4J + Logback,引入 jcl-over-slf4j 統一橋接 Spring 內部日誌。
  2. 禁止直接依賴 commons-logging,避免多綁定警告(SLF4J 會檢測並報警)。
  3. 定期執行 mvn dependency:analyze 檢測未聲明/未使用依賴。

總結

NoClassDefFoundError: LogFactory 本質是缺少 JCL 實現。添加 commons-logging:1.2 即可快速修復;長期建議遷移至 SLF4C 生態,獲得更豐富的日誌功能與更優的性能。

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