Tomcat作为准JSP / Servlet容器,不支持CDI。您如何确切地安装CDI?你真的降
javaee-api.jar的
/WEB-INF/lib只是为了让你的代码编译?哦,不,这不是正确的方法。Java EE API
JAR仅包含API类,而不包含具体实现。摆脱整个JAR。它可能会引起许多其他可移植性问题,例如此答案中描述的问题:如何在Eclipse项目中导入javax.servlet
API?实际上,您应该安装具体的实现以及特定的API。
您有2个选择:
- 删除Tomcat并使用真正的Java EE容器。在使用Tomcat时,只需转到TomEE即可。这非常简单,下载TomEE Web配置文件zip文件,解压缩并将其集成到Eclipse中,就像使用Tomcat一样。不要忘记从webapp中删除Java EE JAR文件,并将项目属性中的 Targeted Runtime 属性从Tomcat更改为TomEE,以便正确解决Java EE依赖性。
无需其他JAR或配置。您甚至可以从Web应用程序中删除JSF JAR。作为真正的Java
EE容器,TomEE已经提供了现成的JSF和CDI。如果您使用的是Maven,则下面的坐标就足够了。
<dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version><!-- 8.0 or 7.0 or 6.0 --></version> <scope>provided</scope></dependency>
请注意的重要性
provided及其含义,例如“目标运行时已提供了此功能”。
在Tomcat上安装真正的CDI实现。焊接是可用的CDI实现之一。在Weld安装指南中,您可以找到有关如何将其集成到Tomcat中的说明。为了完整性和将来的参考,以下是步骤:
将
weld-servlet-shaded.jar
放到webapp的中/WEB-INF/lib
。如果您使用的是Maven,请使用以下坐标:<dependency><groupId>org.jboss.weld.servlet</groupId><artifactId>weld-servlet-shaded</artifactId><version>3.1.4.Final</version>



