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

时间:2012-10-24 19:28:57

标签: java java-ee maven cdi jboss-weld

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

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”,其中包含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

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

3 个答案:

答案 0 :(得分:92)

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

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

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

答案 1 :(得分:10)

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

报价:

  

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

答案 2 :(得分:0)

http://www.javamonamour.org/2017/11/cdi-in-java-se-8.html在这里你可以看到我把它成功放在哪里,就是在src / META-INF下。该帖子包含Java SE中CDI的完整工作示例。