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

如何在Quarkus 3/Undertow中绕过excluded-artifacts引入javax.servlet-api?

解决Quarkus 3与旧javax.servlet依赖兼容的方案

以下是无需升级旧库的可行解决办法:

1. 使用Felix提供的javax.servlet-api替代官方构件

Quarkus Undertow扩展仅排除了javax.servlet:javax.servlet-api,你可以引入Felix维护的同API实现,它的groupId不同,不会被自动排除:

<dependency>
    <groupId>org.apache.felix.http</groupId>
    <artifactId>org.apache.felix.http.javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>runtime</scope>
</dependency>

这个构件和官方javax.servlet-api的API完全一致,能满足org.apache.felix.http.wrappers的运行时依赖需求。

2. 在pom.xml中强制覆盖Quarkus的排除规则

通过Maven的依赖管理,强制引入javax.servlet:javax.servlet-api并取消Quarkus的排除配置:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-undertow</artifactId>
            <version>${quarkus.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>javax.servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

这种方式直接取消Quarkus对该依赖的排除,确保运行时能加载到javax.servlet的API类。

3. 字节码增强替换命名空间

使用字节码处理工具(比如Byte Buddy),在构建阶段自动将旧库中的javax.servlet包路径替换为jakarta.servlet。你可以在Maven中配置net.bytebuddy:byte-buddy-maven-plugin,对旧依赖的字节码进行批量修改,这样旧库就能直接适配Quarkus的Jakarta环境,无需额外引入javax API。


内容的提问来源于stack exchange,提问作者Andrei Damian-Fekete

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:16:06