2012-10-24 161 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) –