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

2022-08-31 15:50:30

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

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

现在当我跑步时,我总是得到:mvn clean installMissing 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

到目前为止没有任何效果:/


答案 1

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

对于 WAR 包装,应将 放入 .beans.xmlsrc/main/webapp/WEB-INF/

请记住,只有文件应该放在 和 目录中。文件等资源应位于 ..javasrc/main/javasrc/test/java.xmlsrc/main/resources


答案 2

为了补充上面的答案,这里有一个关于这个问题的官方参考:https://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html

报价:

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


推荐