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

Posted

技术标签:

【中文标题】CDI:beans.xml,我把你放在哪里?【英文标题】:CDI: beans.xml, where do I put you? 【发布时间】:2012-10-14 21:55:21 【问题描述】:

我使用 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

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

【问题讨论】:

在我的 CDI 项目中 beans.xml 在 src\main\webapp\WEB-INF 中,在我的 war 文件中它也在 WEB-INF 目录中。 【参考方案1】:

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

【讨论】:

【参考方案2】:

为了补充上面的答案,这里有一个官方参考: 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 Tutorial【参考方案3】:

对于 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 中。

【讨论】:

在我的情况下,我正在测试 cdi-unit(使用 Weld)我必须把它放在我的 src 中 @dalvarezmartinez1 我打赌你可以将 beans.xml 移动到 /src/main/resources ;它应该在构建后出现在“类”文件夹中 @JonOnstott 你是对的。实际上现在它在 src/main/webapp/WEB-INF 但这只是因为我们使用的是 gradle,war 插件默认情况下希望它在这个位置。我想说这完全取决于打包战争/罐子的工具。 对我来说是否jar or war 我不得不把它放在/src/main/resources/WEB-INF 中。总之谢谢

以上是关于CDI:beans.xml,我把你放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

JBoss EAP 6.2 CDI beans.xml

MySQL 中的 FORCE INDEX - 我把它放在哪里?

你把你的语义信息挂在哪里,html?

在项目中将 useDispatch 和 bindActionCreators 放在哪里?

我将在哪里实现 .sort() 到我的代码中?

下载的jar文件放在哪里