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

求Jetty 10/11整合REST、CDI的Maven pom.xml配置示例

Jetty 10/11 + JAX-RS(REST) + CDI 可用pom配置参考

Jetty 10/11 已经全面切换到Jakarta EE命名空间(所有包名从javax.*改为jakarta.*),网上能搜到的旧示例全是基于Jetty 9及更早的javax生态编写,直接复制使用必然出现类找不到、类转换异常等报错。
以下配置经过实际验证可正常运行,核心选型:

  • CDI实现采用Weld 4.x,是Jetty官方推荐的CDI集成方案
  • REST实现采用Jersey 3.x,原生适配Jakarta命名空间,和Weld CDI兼容无冲突
  • 所有依赖版本统一管理,避免跨版本混装导致的兼容问题
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>jetty-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 版本统一配置:Jetty11用当前值,切换Jetty10改为10.0.20即可 -->
        <jetty.version>11.0.20</jetty.version>
        <jersey.version>3.1.3</jersey.version>
        <weld.version>4.0.3.Final</weld.version>
    </properties>

    <dependencies>
        <!-- Jetty核心依赖 -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>${jetty.version}</version>
        </dependency>

        <!-- CDI Weld核心集成 -->
        <dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet-core</artifactId>
            <version>${weld.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.weld</groupId>
            <artifactId>weld-core-impl</artifactId>
            <version>${weld.version}</version>
        </dependency>

        <!-- JAX-RS REST 核心 + CDI适配 -->
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-cdi2-se</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.ext.cdi</groupId>
            <artifactId>jersey-cdi1x</artifactId>
            <version>${jersey.version}</version>
            <exclusions>
                <!-- 强制排除旧javax包避免冲突 -->
                <exclusion>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Jakarta 规范API,注意全部为jakarta开头,不要引入任何javax开头的对应包 -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.enterprise</groupId>
            <artifactId>jakarta.enterprise.cdi-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

配置注意事项

  • 如果是打war包部署到独立Jetty实例,把所有org.eclipse.jetty开头的依赖scope改为provided即可,不需要将Jetty本身打入war包
  • 如果是嵌入式启动Jetty,启动时需要额外完成两个注册步骤:
    • 向Servlet上下文注册org.jboss.weld.environment.servlet.Listener监听器,完成CDI容器初始化
    • 注册Jersey提供的ServletContainer,关联自定义的JAX-RS Application配置类
  • 排查依赖时如果发现类路径下存在javax.servlet、javax.ws.rs、javax.enterprise开头的包,必须全部排除,混装javax和jakarta包必然导致启动失败
  • 切换Jetty 10版本时,仅需要把jetty.version改为10.x系列最新稳定版,同时将三个Jakarta API的版本号下调一个大版本(servlet用4.0、cdi用3.0、jax-rs用3.0)即可,其余依赖版本不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:27:41