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

JSF从javax迁移至Jakarta后出现ServletFileUpload方法缺失错误求助

问题排查与解决方案

核心原因

你遇到的java.lang.NoSuchMethodError是因为旧版Apache Commons FileUpload仅兼容javax.servlet API,而你的项目已迁移至Jakarta EE 9(使用jakarta.servlet API),两者的HttpServletRequest类分属不同包,方法签名完全不匹配,导致JVM找不到适配Jakarta版本的isMultipartContent方法。

具体解决方案

1. 替换为Jakarta兼容的Commons FileUpload版本

移除项目中旧的commons-fileupload依赖,改用专门适配Jakarta的commons-fileupload2-jakarta,在pom.xml中添加以下配置:

<!-- 移除旧的commons-fileupload依赖(如果存在) -->
<!-- <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>xxx</version>
</dependency> -->

<!-- 添加Jakarta兼容版本 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-fileupload2-jakarta</artifactId>
    <version>2.0.1</version>
</dependency>

2. 排除PrimeFaces的旧版依赖

PrimeFaces 11默认依赖旧版commons-fileupload,需要排除其传递依赖避免冲突:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>11.0.0</version>
    <exclusions>
        <exclusion>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 解决GlassFish服务器库冲突

GlassFish 6.2.5可能自带旧版commons-fileupload,需配置类加载优先级让项目依赖优先加载:

  • 编辑GlassFish的domain.xml,找到你的应用配置,添加class-loader节点:
<application name="你的应用名" location="你的应用.war" context-root="/你的上下文路径">
    <class-loader delegate="false"/>
</application>
  • 此配置会让项目自身的依赖优先于服务器自带库加载,避免版本冲突。

4. 验证依赖树

运行Maven命令检查依赖树,确保没有旧版commons-fileupload被引入:

mvn dependency:tree

如果输出中仍出现commons-fileupload:commons-fileupload,找到对应的依赖源并排除。

内容的提问来源于stack exchange,提问作者Ömer Faruk Kurt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:55:19