WELD-001409 类型 [EagerBeansRepository] ​​的依赖性不明确

WELD-001409 Ambiguous dependencies for type [EagerBeansRepository]

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

但是,Omnifaces 错误阻止了部署,因为我收到了 3 次以下错误:

org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [EagerBeansRepository] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private org.omnifaces.ApplicationListener.eagerBeansRepository]. Possible dependencies [[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 会导致此错误?

开发环境:

此异常表明 OmniFaces JAR(具体来说,包含提到的不明确 class 的 JAR,在您的特定情况下 EagerBeansRepository)在运行时 classpath 中重复。如果 JAR 正确放置在 Web 应用程序的 /WEB-INF/lib 中而不是其他位置,那么如果 GlassFish 工作文件夹在部署之前没有正确清理,就会发生这种情况。特别是众所周知,GlassFish Eclipse 插件在这方面失败了。您需要手动清理 /glassfish/domains/[domainname].

中的 GlassFish 工作文件夹

顺便说一句,在您使用它的同时,我强烈建议您也升级到 GlassFish 4.1。 GlassFish 4.0 就像每个第一个 GlassFish 版本一样(所有的麻烦都准备好作为 "First Java EE X Application Server" 以及每个新的 Java EE API 版本)太多的童年错误。