在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
相关产品推荐
相关产品推荐

