2012-01-24 228 views
18

我刚刚从7.0升级到NetBeans 7.1。在打开一个JSF托管bean时,它“有用地”告诉我它找不到我的beans.xml文件,所以我喜欢它为我创建的。我知道我在WEB-INF下有一个beans.xml文件,但无论如何我都会说是的,看看发生了什么。 META-INF下为我创建了一个新的beans.xml。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

回答

35

拥有的beans.xml放置在WEB-INF目录是在你的情况很好,因为很有可能豆WEB-INF类下。

beans.xml的正确位置取决于归档的类型和bean类的位置。

在说明书中是这样解释如下:

启用豆的豆类必须在豆档案进行部署。

  • 库罐子,罐子EJB,应用程序客户端JAR或RAR压缩包是一个bean存档,如果它有一个名为beans.xml中的META-INF目录下的文件。
  • 如果在war的WEB-INF目录中有一个名为beans.xml的文件,war的WEB-INF/classes目录就是一个bean存档。
  • 如果在META-INF目录中有一个名为beans.xml的文件,JVM类路径中的一个目录就是一个bean归档文件。
+0

优秀的答案,谢谢,教了我一些新的东西。我怀疑NetBeans在这种情况下是错误的。 – wobblycogs

+0

这个答案帮助我理解了异常'javax.enterprise.inject.UnsatisfiedResolutionException:Api类型...'异常我在一个servlet中使用@Inject。我将beans.xml放置在META-INF中而不是WEB-INF中。 – p1brunne