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

Maven+Eclipse环境下Struts2配置冲突问题求解

解决Struts2在WebSphere 8.5.5中ObjectFactory Bean重复加载的500错误

问题场景

将遗留应用升级至Maven架构后,部署在WebSphere Application Server traditional 8.5.5上,使用Eclipse 4.16.0启动服务器,编译正常但访问Struts Web应用时出现500错误:

Error 500: javax.servlet.ServletException: Filter [struts2]: could not be initialized

服务器核心错误日志:

[30/05/23 10:37:26:986 BRT] 000000b6 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor]: Unable to load configuration. - bean - wsjar:file:/C:/Users/DouglasCanevarollo/Desktop/ibm/evs/evs-maven/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/evs-ip-upload/WEB-INF/lib/struts2-core-6.1.2.jar!/struts-default.xml:116:72
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:566)
    at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:48)
    at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:60)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:145)
...
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name struts has already been loaded by bean - wsjar:file:/C:/Users/DouglasCanevarollo/.m2/repository/org/apache/struts/struts2-core/6.1.2/struts2-core-6.1.2.jar!/struts-default.xml:116:72 - bean - wsjar:file:/C:/Users/DouglasCanevarollo/Desktop/ibm/evs/evs-maven/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/evs-ip-upload/WEB-INF/lib/struts2-core-6.1.2.jar!/struts-default.xml:116:72
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:263)
    ... 34 more

相关配置文件:

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 6.0.//EN"
    "http://struts.apache.org/dtds/struts-6.0.dtd">
 <struts>
    ...
 
    <!-- Package -->
    <package name="default" namespace="/protect" extends="struts-default">
    
        <!-- Action Mappings -->
        <action name="uploadIpDb" method="runInit" class="com.ibm.comexp.ipupload.action.IPUploadAction" >
            <result>/home.jsp</result>
        </action>
        ...
    </package>

 </struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 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/web-app_3_0.xsd">
    
    ...
    
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

原因分析

日志明确显示com.opensymphony.xwork2.ObjectFactory类型的struts Bean被重复加载,来源是两份相同版本的struts2-core-6.1.2.jar——一份在本地Maven仓库,另一份在服务器临时部署目录的WEB-INF/lib中。这种重复加载导致Struts初始化时配置冲突,触发Filter初始化失败。

解决方案

  • 排查并清理重复依赖
    执行mvn dependency:tree命令生成项目依赖树,检查是否存在多路径引入struts2-core的情况。如果有,在Maven的<dependencies>中通过<exclusions>标签排除冗余依赖,确保仅保留一份struts2-core依赖。

  • 清理服务器临时部署目录
    删除Eclipse服务器临时目录(路径为C:/Users/DouglasCanevarollo/Desktop/ibm/evs/evs-maven/.metadata/.plugins/org.eclipse.wst.server.core/tmp0),然后重新发布应用,彻底清除旧的jar包残留。

  • 调整WebSphere类加载策略
    登录WebSphere控制台,找到目标应用的类加载设置,将类加载顺序修改为PARENT_LAST(应用类加载器优先)。这样应用自身WEB-INF/lib中的jar会优先被加载,避免与服务器类加载器中的重复类产生冲突。

  • 验证Eclipse部署配置
    在Eclipse中打开服务器配置,检查「Deployment Assembly」选项,确保没有重复添加Maven依赖到部署目录。确认仅包含必要的项目资源和依赖项,无重复条目。

内容的提问来源于stack exchange,提问作者dcanevarollo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:07:02