寻求在Apache Tomcat 9运行Java EE Web Profile 8的规范Maven依赖列表
错误根因
你遇到的报错是因为仅引入了Java EE Web Profile 8的API接口依赖,没有引入对应规范的实现包。Apache Tomcat 9本身仅实现了Servlet 4.0、JSP 2.3、EL 3.0、WebSocket 1.1、JASPIC 1.1这几个基础规范,Web Profile 8中包含的JSF、CDI、JPA、Bean Validation等其余规范都没有内置实现,需要手动引入对应实现包才能运行。
你当前引入的jakarta.jakartaee-web-api:8.0.0仅包含规范接口,默认scope为compile会和Tomcat自带的Servlet等基础规范类冲突,首先需要调整这个依赖的配置。
完整POM依赖配置方案
第一步:调整API基础依赖
<dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-web-api</artifactId> <version>8.0.0</version> <scope>provided</scope> </dependency>
第二步:按需引入对应规范的实现包
不需要的组件可以直接跳过,减少应用体积:
- JSF 2.3实现(当前报错就是缺少该依赖)
<dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>2.3.14</version> </dependency>
- CDI 2.0实现
<dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet-shaded</artifactId> <version>3.1.9.Final</version> </dependency>
- JPA 2.2实现
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.32.Final</version> </dependency>
- Bean Validation 2.0实现
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.2.5.Final</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>3.0.0</version> </dependency>
- JSON处理相关实现
<!-- JSON-P 1.1 --> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.1.6</version> </dependency> <!-- JSON-B 1.0 --> <dependency> <groupId>org.eclipse</groupId> <artifactId>yasson</artifactId> <version>1.0.8</version> </dependency>
- JAX-RS 2.1实现(需要开发REST接口时引入)
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.37</version> </dependency>
注意事项
- 所有依赖版本都要匹配Java EE 8规范要求,不要引入Jakarta EE 9及以上版本的依赖,这类依赖已经全面改为
jakarta.*包名,和Tomcat 9使用的javax.*包名不兼容,会出现类转换异常。 - 配置完成后清理本地Maven缓存,重新打包部署即可解决当前的
MissingResourceException报错。
内容的提问来源于stack exchange,提问作者Hendré
相关产品推荐
相关产品推荐

