WELD-001409类型[EagerBeansRepository]的不明确依赖关系

时间:2015-03-26 15:16:54

标签: jsf glassfish cdi omnifaces weld

我正在尝试将我的JSF应用程序迁移到CDI。我已经实现了以下更改:

  • 将空beans.xml文件添加到WEB-INF
  • 将@ManagedBean更改为@Named
  • 将我拥有的所有范围更改为CDI范围(会话,视图,请求)
  • 将所有@EJB和@ManagedProperty更改为@Inject

然而,Omnifaces错误阻止了部署,因为我三次收到以下错误:

  

org.jboss.weld.exceptions.DeploymentException:WELD-001409类型为[EagerBeansRepository]的模糊依赖项,注入点为[@Default] [[BackedAnnotatedField] @Inject private org.omnifaces.ApplicationListener.eagerBeansRepository]。可能的依赖[[Managed Bean [class org.omnifaces.cdi.eager.EagerBeansRepository] ​​with qualifiers [@Any @Default],Managed Bean [class org.omnifaces.cdi.eager.EagerBeansRepository] ​​with qualifiers [@Any @Default]] ]

我已降级为Omnifaces 1.8.1并且部署成功。为什么Omnifaces 2.0会导致此错误?

开发环境:

  • Glassfish 4
  • Omnifaces 2.0
  • JSF(Mojarra 2.2.0)
  • WELD-000900 2.0.0(SP1)

1 个答案:

答案 0 :(得分:4)

此异常表明OmniFaces JAR(特别是包含所提到的歧义类的JAR,在您的特定情况下为EagerBeansRepository)在运行时类路径中重复。如果JAR正确放置在webapp的/WEB-INF/lib而不是其他位置,那么如果在部署之前未正确清理GlassFish工作文件夹,则会发生这种情况。特别是已知GlassFish Eclipse插件在此失败。您需要在/glassfish/domains/[domainname]

中手动清理GlassFish工作文件夹

顺便说一下,当你在这里时,我强烈建议你升级到GlassFish 4.1。 GlassFish 4.0就像每个第一个GlassFish版本一样(为#34;第一个Java EE X应用服务器"以及每个新的Java EE API版本准备好的所有麻烦)太多的童年错误。