如何解决WebLogic部署JAX-RS Jersey+Swagger REST服务时的SLF4J错误
解决WebLogic部署JAX-RS Jersey+Swagger服务时的SLF4J类加载冲突问题
这个NoClassDefFoundError我太熟了——本质就是WebLogic自带的低版本SLF4J和你项目里的高版本SLF4J打架了。LocationAwareLogger是SLF4J 1.7及以上版本才有的接口,而WebLogic默认自带的SLF4J版本大多是1.6.x甚至更低,服务器的类加载机制优先加载自身的旧库,导致你项目里的高版本SLF4J根本没被用上。
你已经尝试了prefer-web-inf-classes和包优先级配置,但没生效,大概率是配置的格式或者覆盖范围不对,下面给你一套完整的解决方案:
一、修正weblogic.xml的配置
首先确保weblogic.xml放在WEB-INF目录下,然后用下面的完整配置(注意XML命名空间要匹配你的WebLogic版本,这里以12c常用的1.7 schema为例):
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd"> <!-- 开启优先加载WEB-INF下的类,覆盖服务器自带的同名类 --> <prefer-web-inf-classes>true</prefer-web-inf-classes> <!-- 明确指定优先加载应用的SLF4J相关包,要覆盖所有子包 --> <prefer-application-packages> <package-name>org.slf4j.*</package-name> <package-name>org.slf4j.spi.*</package-name> </prefer-application-packages> <!-- 兜底配置:直接指定要优先加载的SLF4J核心资源 --> <prefer-application-resources> <resource-name>org/slf4j/spi/LocationAwareLogger.class</resource-name> <resource-name>org/slf4j/**</resource-name> </prefer-application-resources> </weblogic-web-app>
这里要注意:
- 别漏了
org.slf4j.spi.*这个包,LocationAwareLogger就属于这个子包; - XML的命名空间和schemaLocation一定要正确,不然WebLogic可能会忽略你的配置;
二、检查项目里的SLF4J依赖包
确认你的WEB-INF/lib里有完整的高版本SLF4J包:
- 必须有
slf4j-api-1.7.x.jar(比如1.7.36,这个是核心API包,包含LocationAwareLogger); - 如果用了日志实现(比如Log4j、JDK日志),对应的SLF4J绑定包版本要和
slf4j-api一致,比如slf4j-log4j12-1.7.x.jar,版本不匹配也会出问题;
三、清空WebLogic缓存再试
WebLogic的类缓存有时候会坑人——哪怕你改了配置,它还在加载旧的类。解决方法:
- 停掉WebLogic服务器;
- 找到你的WebLogic域目录,删掉
servers/[你的服务器名]/tmp和servers/[你的服务器名]/cache这两个文件夹; - 重启服务器,重新部署你的应用;
四、兜底方案:强制指定SLF4J加载路径
如果上面的方法都不管用,那可以在WebLogic的启动参数里加个JVM参数,强制让JVM优先加载你项目里的SLF4J:
-Djava.endorsed.dirs=/path/to/your/project/WEB-INF/lib
把路径换成你项目WEB-INF/lib的实际路径就行,这个参数会让JVM把指定目录下的jar包当成“认可库”,优先加载里面的类。
按照这个流程走,应该能解决这个类加载冲突的问题,让WebLogic乖乖用你项目里的SLF4J版本。
内容的提问来源于stack exchange,提问作者Iván
相关产品推荐
相关产品推荐

