正在启动Web应用程序,但出现以下错误消息:
... Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory ...
1.正常情况
1.1显然,缺少Apache Commons日志commons-logging-xxx.jar
。 要修复它,请从Maven中央存储库中获取它。
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.2</version>
- </dependency>
2.弹簧套
2.1对于Spring应用程序,开发人员总是排除commons-logging
,但是忘记包括另一个日志记录框架。 例如
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
上面的声明将导致此类classNotFoundException: org.apache.commons.logging.LogFactory
也。
2.2要修复该问题,请声明另一个日志框架,通常是SLF4j,并通过网桥重定向Spring的日志。
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <!-- bridge jck to slf4j -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <version>${jcl.slf4j.version}</version>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>${logback.version}</version>
- </dependency>
参考文献
翻译自: https://mkyong.com/java/javalangnoclassdeffounderror-orgapachecommonslogginglogfactory/