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

将JAX-RS项目从Jetty迁移到OpenLiberty的配置疑问

将JAX-RS项目从Jetty迁移到OpenLiberty的配置方案

你的核心疑问是:原项目基于Jersey的ResourceConfig做配置,迁移到OpenLiberty时是否仅需调整server.xml?答案是不行,因为ResourceConfig是Jersey特有的API,而OpenLiberty默认采用RESTEasy作为JAX-RS实现。不过你有两种选择:继续用Jersey,或者改用OpenLiberty自带的RESTEasy(推荐后者,集成更顺畅)。


方案一:继续使用Jersey作为JAX-RS实现

1. 调整项目依赖

如果是Maven项目,在pom.xml中添加Jersey 3.x的依赖(匹配JAX-RS 3规范):

<dependencies>
    <!-- Jersey核心依赖 -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>3.1.5</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>3.1.5</version>
        <scope>compile</scope>
    </dependency>
    <!-- 根据需要添加其他Jersey模块,比如JSON支持 -->
</dependencies>

2. 修改server.xml

禁用OpenLiberty自带的JAX-RS特性,只保留Servlet基础特性:

<server>
    <featureManager>
        <feature>servlet-6.0</feature> <!-- 对应JAX-RS 3.x的Servlet版本 -->
        <!-- 不要包含jaxrs-3.0特性 -->
    </featureManager>

    <webApplication contextRoot="/" location="你的项目war包路径"/>
</server>

3. 调整原有代码

原ResourceConfig类可以继续使用,但建议把@ApplicationPath改成JAX-RS标准格式(去掉*,这是Servlet映射语法,JAX-RS基础路径不需要):

@ApplicationPath("/api")
public class Application extends ResourceConfig {

    public Application() {
        jakarta.ws.rs.core.Feature feature = ...;
        register(feature);
        packages("io.agrest.example.api");
    }
}

方案二:改用OpenLiberty自带的RESTEasy(推荐)

RESTEasy是OpenLiberty原生集成的JAX-RS实现,无需额外引入大量依赖,配置更简洁。

1. 调整项目依赖

只需要依赖标准的JAX-RS API(OpenLiberty会提供实现):

<dependency>
    <groupId>jakarta.ws.rs</groupId>
    <artifactId>jakarta.ws.rs-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

2. 替换Jersey特有的ResourceConfig为标准JAX-RS Application

把原来的类改成继承jakarta.ws.rs.core.Application,用标准API完成配置:

import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("/api")
public class MyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        // 注册你的Feature类
        classes.add(你的Feature实现类.class);
        // 也可以直接添加资源类,比如UserResource.class
        return classes;
    }

    // 如果需要注册Feature实例而非类,重写此方法
    @Override
    public Set<Object> getSingletons() {
        Set<Object> singletons = new HashSet<>();
        // singletons.add(你的Feature实例);
        return singletons;
    }
}

3. 配置自动扫描资源包

如果不想手动注册所有资源类,可以通过web.xml配置自动扫描:

<web-app>
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.packages</param-name>
        <param-value>io.agrest.example.api</param-value>
    </context-param>
</web-app>

4. 修改server.xml

启用OpenLiberty的JAX-RS特性:

<server>
    <featureManager>
        <feature>jaxrs-3.0</feature>
        <feature>servlet-6.0</feature>
        <!-- 如果需要JSON支持,添加jsonb-3.0或jsonp-3.0特性 -->
    </featureManager>

    <webApplication contextRoot="/" location="你的项目war包路径"/>
</server>

内容的提问来源于stack exchange,提问作者Andrea Borgogelli Avveduti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:52:06