我在IntelliJ中有一个maven项目,我试图将war文件部署到jetty容器中 . 这样做的目的是对所述war文件中的一些功能进行快速集成测试 .
由于开箱即用Jetty没有附带CDI或JNDI,我试图添加对这些的支持,但遇到了一些问题 . 例如,我在启动时收到以下错误:
15:30:50 [34mINFO [0;39m o.a.s.c.CdiObjectFactory - [lookup]: Checking for BeanManager under JNDI key java:comp/BeanManager
15:30:50 [39mDEBUG[0;39m o.a.s.c.CdiObjectFactory - [lookup]: BeanManager lookup failed for JNDI key java:comp/BeanManager
我已将焊接servlet jar包含在我的pom中,并且还将焊接侦听器添加到web.xml中,但它仍然无效 . 我正在使用Jetty 9.有什么想法吗?
pom.xml <dependency>
<的groupId> org.jboss.weld.servlet </的groupId>
<artifactId的>焊接servlet的芯</ artifactId的>
<版本> 2.0.4.Final </版本>
</依赖性>
web.xml <listener>
<监听级> org.jboss.weld.environment.servlet.Listener </监听级>
</听众>
<resource-env-ref>
<description>Object factory for the CDI Bean Manager</description>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>
2 回答
以下配置适用于Jetty 8.x和9.0.x(目前不是9.1)
以下是所需的配置:
在Pom.xml中添加依赖项
请注意我正在使用
weld-servlet
依赖项,其中包含所有需要的Weld和CDI类 .在
jetty-env.xml
中,您声明了JNDI资源在
web.xml
中添加侦听器并公开JNDI资源:最后,如果你想能够在servlet中注入bean,你需要通过在
WEB-INF
目录中创建以下jetty-web.xml
文件来让Jetty公开它的一些内部类 .不要错过
<Item/>
中的-
,这是告诉Jetty一个类不再是内部类并且可以被webapp看到的方法 . 有了这个,Weld将能够装饰Jetty内部servlet类,在其中添加CDI Injection支持 .Bonus : using the jetty plugin for Maven
它's quite easy, you' ll只需要为你的
pom.xml
添加run
Profiles之后,您只需输入
mvn -Prun
来构建您的应用程序,启动Jetty并在其中部署应用程序 .Jetty 9.1.0需要Weld 2.2.0
见:https://issues.jboss.org/browse/WELD-1561