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。
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
將 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-starter 已傳遞依賴 spring-jcl(Spring 內部 JCL 實現),若仍報錯請檢查:
spring-jcl?commons-logging 導致版本衝突?mvn dependency:tree | grep commons-logging 確認版本唯一。jcl-over-slf4j 統一橋接 Spring 內部日誌。mvn dependency:analyze 檢測未聲明/未使用依賴。NoClassDefFoundError: LogFactory 本質是缺少 JCL 實現。添加 commons-logging:1.2 即可快速修復;長期建議遷移至 SLF4C 生態,獲得更豐富的日誌功能與更優的性能。