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

Xor*_*rty 58 java java-ee maven cdi jboss-weld

我使用Weld作为CDI实现.当我有空的beans.xml时,我试图组装实例化Weld容器的对象图的集成测试运行良好src/test/java/META-INF/beans.xml.这是一个简单的测试:

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

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

我的根文件夹是"src"和"web",其中包含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
Run Code Online (Sandbox Code Playgroud)

到目前为止没有任何作用:/

mab*_*aba 101

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

对于WAR包装,你应该把beans.xmlsrc/main/webapp/WEB-INF/.

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


99S*_*ono 11

为了补充上述答案,以下是对此的官方参考:https: //docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html

引用:

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

  • 在Java EE 7中,`beans.xml`不再是必需的.请参阅[Oracle Java EE教程](https://docs.oracle.com/javaee/7/tutorial/cdi-basic013.htm) (7认同)