60

我正在使用 Weld 作为 CDI 实现。我的集成测试,它试图组装对象图实例化 Weld 容器运行良好,当我在src/test/java/META-INF/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”,其中包含 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

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

4

3 回答 3

110

对于 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.

于 2012-10-24T20:27:59.777 回答
13

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

引用:

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

于 2015-08-24T10:36:14.557 回答
0

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

于 2017-11-05T16:32:51.510 回答