2012-10-24 200 views
39

我使用Weld作为CDI实现。我的集成测试,试图组装对象图实例化焊接容器效果不错,当我在src/test/java/META-INF/beans.xml空beans.xml。下面是一个简单的测试:CDI:beans.xml,我把你放在哪里?

public class WeldIntegrationTest { 
    @Test 
    public void testInjector() { 
     new Weld().initialize(); 
     // shouldn't throw exception 
    } 
} 

当我运行mvn clean install现在,我总是得到:Missing beans.xml file in META-INF!

我的根文件夹“SRC”和“网络”,其中包含WEB-INF文件夹,但我也试过使用默认的maven结构并将“web”重命名为“webapp”并将其移至src/main。我尝试了所有我能想到的合理的位置:

- src/main/java/META-INF/beans.xml 
- src/test/java/META-INF/beans.xml 
- web/WEB-INF/beans.xml 
- src/main/webapp/WEB-INF/beans.xml 
- src/main/webapp/META-INF/beans.xml 
- src/main/webapp/META-INF/(empty) and src/main/webapp/WEB-INF/beans.xml 

没有什么工作至今:/

+0

在我的CDI项目中,beans.xml位于src \ main \ webapp \ WEB-INF中,并且在我的war文件中它也位于WEB-INF目录中。 – kaos

回答

74

对于EJB和JAR包装,你应该把beans.xmlsrc/main/resources/META-INF/

对于WAR包装,您应该将beans.xml放入src/main/webapp/WEB-INF/

请记住,只有.java文件应放在src/main/javasrc/test/java目录中。资源如.xml文件应位于src/main/resources

+0

完美的,在我的情况下它在src/main/resources/META-INF – Xorty

+0

中工作在我的情况下,我正在测试cdi-unit(使用Weld)我必须把它放在我的src – dalvarezmartinez1

+0

@ dalvarezmartinez1我敢打赌, .xml复制到/ src/main/resources中;它应该在构建 –

8

只是为了补充上面的回答,这里是这个官方参考: https://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html

报价:

使用CDI必须有一个名为beans.xml的文件的应用程序。该文件可以是完全空的(它仅在某些有限的情况下才有内容),但它必须存在。对于Web应用程序,beans.xml文件必须位于WEB-INF目录中。对于EJB模块或JAR文件,beans.xml文件必须位于META-INF目录中。

+4

在Java EE 7中'beans.xml'不再是强制性的。请参见[Oracle Java EE教程](https://docs.oracle.com/javaee/7/tutorial/cdi-basic013.htm) –