CDI:beans.xml,我把你放在哪里?

我正在使用Weld作为CDI实现。 当我在src/test/java/META-INF/beans.xml有空的beans.xml时,我的集成testing试图组装对象图实例化Weld容器。 这是简单的testing:

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

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

我的根文件夹是包含WEB-INF文件夹的“src”和“web”,但我也尝试使用默认的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 

目前为止没有任何工作:/

对于EJB和JAR包装,您应该将beans.xml放在src/main/resources/META-INF/

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

请记住,只有.java文件应该放在src/main/javasrc/test/java目录中。 像.xml文件这样的资源应该在src/main/resources

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

引用:

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