尝试使用CDI 2.0设置一个Maven Web项目,该项目应在Tomcat 8.5上运行。所以我必须安装jboss WELD 3。

What is the relation between Weld, CDI and Java EE versions?

随着POM声明不在此处(仅“ weld-servlet-core”)...

WELD - POM declaration (docs.jboss.org)

我在web.xml中声明了“ WeldTerminalListener”错误,如下所示:

<!-- This listener should always be the last registered listener -->
<listener>
    <listener-class>org.jboss.weld.servlet.WeldTerminalListener</listener-class>
</listener>


错误:java.lang.ClassNotFoundException:org.jboss.weld.servlet.WeldTerminalListener



如果我使用以下POM声明,则可以正常工作:

<dependency>
  <groupId>org.jboss.weld.servlet</groupId>
  <artifactId>weld-servlet</artifactId>
  <version>2.3.5.Final</version>
</dependency>




焊接Servlet(无“ -core”)3仅可作为alpha使用。版本2不支持CDI 2.0。

因此,我需要POM中的哪个依赖项才能运行它?

最佳答案

焊接3更改了一些工件名称。是shaded工件已更改,请参见this part of documentation

也就是说,在Weld 2中,weld-servlet是此JAR的阴影版本,因此Weld 3中的等效项是weld-servlet-shaded

您可以使用此阴影版本(org.jboss.weld.servlet:weld-servlet-shaded)或核心版本(org.jboss.weld.servlet:weld-servlet-core)。

至于侦听器的类,您可以check yourself on GH,但是故事也有所改变(打招呼,以在JDK 9+中打包冲突)。
就是现在:

<listener>
    <listener-class>org.jboss.weld.module.web.servlet.WeldTerminalListener</listener-class>
</listener>


焊接文档(适用于3.0.3.Final)对此有错误的信息。
我将确保它在下一个版本中得到纠正(感谢指出)。

关于tomcat - Tomcat,WELD 3,CDI 2,WeldTerminalListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49672950/

10-09 10:16