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

从Vaadin 23.3.5迁移至24.0.1时Quarkus启动NoClassDefFoundError问题

Quarkus启动报错:找不到javax.servlet.annotation.WebFilter类

环境配置

maven.compiler.source: 17
vaadin.version: 24.0.1
quarkus.version: 2.16.0.Final

报错日志

ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebFilter
at io.quarkus.undertow.deployment.UndertowBuildStep.(UndertowBuildStep.java:141)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at io.quarkus.deployment.util.ServiceUtil.classesNamedIn(ServiceUtil.java:29)
at io.quarkus.deployment.ExtensionLoader.loadStepsFrom(ExtensionLoader.java:215)
at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:107)
at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:331)
at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:252)
at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:86)
at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:447)
at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:59)
at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:149)
at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:104)
at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:131)
at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62)
Caused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebFilter
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:516)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
... 16 more

错误原因

该错误源于找不到javax.servlet.annotation.WebFilter类,导致Quarkus启动流程中断。核心问题是Quarkus 2.16.0.Final基于Jakarta EE 9规范,该规范已将原Java EE中的javax.servlet包替换为jakarta.servlet包,项目中仍在引用旧的Java EE servlet API类,从而引发类缺失异常。

解决方法

  1. 引入正确的Quarkus Web依赖
    在pom.xml中添加Quarkus官方Web扩展(默认包含Jakarta Servlet API):

    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-web</artifactId>
    </dependency>
    

    若已引入quarkus-undertow,可直接使用,它包含Web扩展的核心功能。

  2. 排查并排除依赖冲突
    执行mvn dependency:tree命令,检查是否有依赖引入了旧的javax.servlet相关包。若发现冲突,通过exclusions标签排除:

    <dependency>
        <!-- 存在冲突的依赖 -->
        <groupId>xxx</groupId>
        <artifactId>xxx</artifactId>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  3. 验证Vaadin与Quarkus的集成依赖
    Vaadin 24.0.1支持Quarkus 2.16.x,但需使用Vaadin官方的Quarkus集成依赖:

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-quarkus-extension</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:35:39