无法构建Google Cloud Endpoints示例项目,报错Log4JLogger未实现Log接口
解决App Engine Endpoints Frameworks构建报错:Class org.apache.commons.logging.impl.Log4JLogger does not implement Log
我之前在搭建这个示例项目时也踩过同样的坑,这个错误本质是日志依赖冲突——commons-logging和log4j的版本不兼容,导致JVM识别不到实现类和接口的对应关系。下面是几个亲测有效的解决步骤:
方法1:排除冲突依赖并手动指定兼容版本
如果用的是Maven,打开项目根目录的pom.xml,找到endpoints-framework相关的依赖,排除自带的commons-logging,再手动引入兼容的版本:
<!-- 排除Endpoints框架自带的冲突commons-logging依赖 --> <dependency> <groupId>com.google.endpoints</groupId> <artifactId>endpoints-framework</artifactId> <version>2.2.2</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 引入兼容的commons-logging版本 --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
Gradle用户可以在build.gradle里做类似的排除:
implementation('com.google.endpoints:endpoints-framework:2.2.2') { exclude group: 'commons-logging', module: 'commons-logging' } implementation 'commons-logging:commons-logging:1.2'
方法2:用SLF4J桥接统一日志实现
如果项目不需要同时维护多种日志框架,可以用SLF4J的桥接依赖替代原生的commons-logging,彻底避免冲突:
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.36</version> <scope>runtime</scope> </dependency>
这个依赖会把commons-logging的调用转发到SLF4J框架,和Log4J的实现类不再产生版本矛盾。
方法3:清理本地仓库缓存
有时候本地Maven/Gradle仓库里的依赖包损坏也会触发这种奇怪的错误。可以删除本地仓库中commons-logging和log4j相关的文件夹,然后重新执行构建命令:
- Maven用户:
mvn clean install -U
- Gradle用户:
./gradlew clean build --refresh-dependencies
如果还是不行,可以用mvn dependency:tree(Maven)或者./gradlew dependencies(Gradle)查看依赖树,找出所有和commons-logging、log4j相关的依赖,逐一排查冲突来源。
内容的提问来源于stack exchange,提问作者tavatar
相关产品推荐
相关产品推荐

