【问题标题】:Tomcat, WELD 3, CDI 2, WeldTerminalListenerTomcat, WELD 3, CDI 2, WeldTerminalListener
【发布时间】:2018-04-05 12:55:07
【问题描述】:

尝试使用 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>

weld-servlet(没有“-core”)3 仅作为 alpha 版本提供。版本 2 不支持 CDI 2.0。

那么我需要 POM 中的哪个依赖项才能使其运行?

【问题讨论】:

    标签: tomcat listener cdi weld


    【解决方案1】:

    Weld 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)对此有错误信息。 我会确保它在下一个版本中得到纠正(感谢您指出这一点)。

    【讨论】:

      【解决方案2】:

      关于 weld-servlet-core 库的 3.x 版本,似乎类的实际位置有所不同。浏览库jar文件后,发现类全名如下:

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

      【讨论】:

      • 谢谢,它有效。 Siliarus的回答比较详细,所以我会接受他的回答
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2017-10-31
      相关资源
      最近更新 更多