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

在Eclipse Oxygen与Tomcat 9中搭建RESTful环境遇JAX-RS依赖问题

我之前也碰到过类似的问题,结合你的环境(Java 9 + Eclipse Oxygen + Tomcat 9),这个报错大概率是两个核心原因:一是Eclipse的项目Facets没正确识别你手动添加的Java EE 6 API JAR;二是Java 9的模块化机制限制了对javax.ws.rs包的访问权限。下面是一步步的解决方法:

解决步骤

1. 修正JAX-RS Facets的库关联配置

Eclipse的Facets配置不会自动识别你手动添加到Build Path的JAR,得手动关联:

  • 右键项目 → Properties → Project Facets
  • 找到「JAX-RS」选项,点击旁边的「Configure...」按钮
  • 在弹出的配置窗口里,选择「User Library」,然后点击「Manage...」
  • 创建一个新的用户库(比如命名为JavaEE6-API),把你之前手动添加的Java EE 6 API JAR添加进去,确保这个库包含javax.ws.rs.Path所在的JAR文件
  • 回到JAX-RS配置窗口,选中这个新建的用户库,点击OK保存配置

2. 处理Java 9的模块化访问限制

Java 9的模块系统默认会限制非模块化项目对javax.ws.rs这类包的访问,需要做以下调整:

方案一:启用模块化(推荐)

在项目根目录创建module-info.java文件,添加以下内容(替换成你的项目信息):

module com.your.project.name {
    requires java.ws.rs;
    requires javax.ws.rs.api;
    opens com.your.rest.package to javax.ws.rs.api; // 替换成你的REST资源所在包
}

方案二:绕过模块化限制(适合传统Web项目)

如果不想用模块化,可以在Tomcat的运行参数里添加开放权限的配置:

  • 右键项目 → Run As → Run Configurations
  • 找到你的Tomcat运行配置,切换到Arguments标签页
  • 在「VM arguments」里添加:
    --add-modules java.se.ee
    --add-opens java.base/java.lang=ALL-UNNAMED
    --add-opens java.base/java.io=ALL-UNNAMED
    

3. 确保Jersey版本与Java 9兼容

Eclipse Oxygen默认的Jersey版本可能偏旧,不支持Java 9,建议替换为Jersey 2.26及以上版本:

  • 移除项目中旧的Jersey JAR包
  • 手动添加Jersey 2.x核心JAR:jersey-server.jar、jersey-container-servlet.jar、jersey-common.jar、jersey-client.jar,以及它们的依赖(比如hk2-api.jar、hk2-locator.jar等)
  • 如果用Maven管理依赖,直接添加:
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.35</version>
    </dependency>
    

4. 验证与清理

  • 执行Project → Clean清理项目,重启Eclipse
  • 再次尝试配置JAX-RS Facets,检查报错是否消失
  • 若仍有问题,去Build Path → Order and Export里确认Java EE 6 API和Jersey JAR都被勾选,确保Facets能识别到这些类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:17:36