WebLogic部署非Maven项目遇ClassNotFoundException问题求助
排查WebLogic部署非Maven项目时的Spring类ClassNotFoundException问题
问题场景
部署非Maven项目到WebLogic Server时出现以下类找不到异常:
- 部署至WebLogic 12.1.3时,提示找不到
org.springframework.web.multipart.MultipartResolver - 部署至WebLogic 12.2.1.4时,提示找不到
org.springframework.web.context.request.async.CallableProcessingInterceptor
已知信息:
- 项目仅引入一个org.springframework.web相关jar包
- Eclipse构建路径已包含WebApp Libraries下的所有jar
- 项目在其他机器可正常运行,怀疑本地环境存在问题
项目Eclipse结构:
├── Ear project ├── Web project └── Java Resources └── resources └── src (packages with Java classes) └── Libraries (with all the jars imported from WEB-INF) └── lib (some javax jar) └── Web Content └── assets └── META-INF └── WEB-INF
附weblogic.application.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-application xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.2/weblogic-application.xsd"> <!--weblogic-version:10.3.5.0--> <wls:application-param> <wls:param-name>webapp.encoding.default</wls:param-name> <wls:param-value>UTF-8</wls:param-value> </wls:application-param> <wls:prefer-application-packages> <wls:package-name>org.eclipse.persistence.*</wls:package-name> <wls:package-name>org.springframework.*</wls:package-name> <wls:package-name>javax.persistence.*</wls:package-name> <wls:package-name>org.joda.time.*</wls:package-name> <wls:package-name>org.apache.log4j.*</wls:package-name> <wls:package-name>org.slf4j.*</wls:package-name> <wls:package-name>com.sun.xml.messaging.saaj.*</wls:package-name> <wls:package-name>javax.xml.soap.*</wls:package-name> </wls:prefer-application-packages> <wls:prefer-application-resources> <wls:resource-name>org.springframework.*</wls:resource-name> </wls:prefer-application-resources> </wls:weblogic-application>
排查步骤
1. 检查Spring Web jar的完整性与版本匹配
- 找到本地项目中的
spring-webjar包,解压后直接查看是否包含缺失的类:- 针对12.1.3报错的
org.springframework.web.multipart.MultipartResolver,确认jar内存在该类文件 - 针对12.2.1.4报错的
org.springframework.web.context.request.async.CallableProcessingInterceptor,同样验证存在性
- 针对12.1.3报错的
- 确认Spring版本兼容对应WebLogic版本:比如
CallableProcessingInterceptor是Spring 3.2+才引入的,若本地spring-web版本过低,在12.2.1.4环境下就会找不到;若jar包损坏也会导致类缺失
2. 验证打包后的WAR/EAR是否包含目标jar
- 本地部署后,找到WebLogic服务器上的部署文件(路径一般为
domain_name/servers/server_name/tmp/_WL_user/项目名),解压查看WAR的WEB-INF/lib目录,确认spring-webjar是否存在,且与本地项目中的文件一致 - 检查Web项目的
Web Content/WEB-INF/lib目录是否真的包含该jar,避免Eclipse构建路径配置正确但实际打包遗漏
3. 排查本地WebLogic域的jar冲突
- 查看本地WebLogic域的
domain_name/lib目录,是否存在其他版本的Spring相关jar包——域级jar会优先加载,可能覆盖项目中的jar导致类找不到 - 对比其他正常运行机器的WebLogic域lib目录,排查差异
4. 确认weblogic.application.xml配置有效性
- 当前配置已通过
prefer-application-packages指定优先加载org.springframework.*,但需确认WebLogic版本是否正确识别该配置(12.1.3和12.2.1.4均支持) - 可尝试添加更具体的包路径(如
org.springframework.web.*),确保应用类加载器优先使用项目中的Spring类
5. 检查Eclipse部署Assembly配置
- 打开Web项目的Properties -> Deployment Assembly,确认所有需要的jar(包括spring-web)都被添加到部署路径,且目标路径为
WEB-INF/lib - 部分情况下,构建路径的jar未配置到Deployment Assembly,会导致打包时遗漏
6. 清理缓存后重新部署
- 删除WebLogic域的
tmp和cache目录,重启服务器后重新部署 - 在Eclipse中执行Project -> Clean,清理构建缓存后重新构建项目
内容的提问来源于stack exchange,提问作者Antonino Scarpelli
相关产品推荐
相关产品推荐

