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/java
和src/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,我把你放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 中的 FORCE INDEX - 我把它放在哪里?