You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-web jar包,解压后直接查看是否包含缺失的类:
    • 针对12.1.3报错的org.springframework.web.multipart.MultipartResolver,确认jar内存在该类文件
    • 针对12.2.1.4报错的org.springframework.web.context.request.async.CallableProcessingInterceptor,同样验证存在性
  • 确认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-web jar是否存在,且与本地项目中的文件一致
  • 检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:15:34