beans.xml 应该放在哪里?
Posted
技术标签:
【中文标题】beans.xml 应该放在哪里?【英文标题】:Where should beans.xml be placed? 【发布时间】:2012-02-17 23:29:29 【问题描述】:我刚刚从 7.0 升级到 NetBeans 7.1。在打开 JSF 托管 bean 时,它“有用地”告诉我它找不到我的 beans.xml 文件,所以我希望它为我创建。我知道我在 WEB-INF 下有一个 beans.xml 文件,但我还是答应了,看看发生了什么。在 META-INF 下为我创建了一个新 beans.xml。
我认为我犯了一个错误,我删除了 WEB-INF 下的文件,只是为了让我的应用程序在启动时失败。将 beans.xml 放回 WEB-INF 解决了这个问题。此页面似乎认为这两个位置都有效:http://seamframework.org/Documentation/WhatIsBeansxmlAndWhyDoINeedIt
那么,问题是 beans.xml 应该放在 WEB-INF 还是 META-INF 中?
我正在运行 GlassFish 3.1.1 和 Java 7
【问题讨论】:
【参考方案1】:在您的情况下,将 beans.xml 放置到 WEB-INF 目录中很好,因为很可能 bean 位于 WEB-INF 类下。
beans.xml 的正确位置取决于归档类型和 bean 类的位置。
在规范中是这样解释的:
已启用 bean 的 Bean 类必须部署在 bean 档案中。
如果库 jar、EJB jar、应用程序客户端 jar 或 rar 归档在 META-INF 目录中有一个名为 beans.xml 的文件,那么它就是一个 bean 归档。 如果战争的 WEB-INF 目录中有一个名为 beans.xml 的文件,那么战争的 WEB-INF/classes 目录就是一个 bean 存档。 如果 JVM 类路径中的目录在 META-INF 目录中有一个名为 beans.xml 的文件,那么它就是一个 bean 存档。
【讨论】:
很好的回答谢谢,教会了我一些新东西。我怀疑 NetBeans 在这种情况下是错误的。 答案帮助我理解了我在 servlet 中使用 @Inject 时遇到的异常javax.enterprise.inject.UnsatisfiedResolutionException: Api type ...
异常。我将 beans.xml 放在 META-INF 而不是 WEB-INF 中。以上是关于beans.xml 应该放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章