WELD-001409 类型 [EagerBeansRepository] 的依赖性不明确
WELD-001409 Ambiguous dependencies for type [EagerBeansRepository]
我正在尝试将我的 JSF 应用程序迁移到 CDI。我实施了以下更改:
- 向 WEB-INF 添加了一个空的 beans.xml 文件
- 将@ManagedBean 更改为@Named
- 将我必须的所有范围更改为 CDI 范围(会话、视图、请求)
- 将所有@EJB 和@ManagedProperty 更改为@Inject
但是,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 会导致此错误?
开发环境:
- 玻璃鱼 4
- Omnifaces 2.0
- JSF(Mojarra 2.2.0)
- WELD-000900 2.0.0 (SP1)
此异常表明 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 版本)太多的童年错误。
我正在尝试将我的 JSF 应用程序迁移到 CDI。我实施了以下更改:
- 向 WEB-INF 添加了一个空的 beans.xml 文件
- 将@ManagedBean 更改为@Named
- 将我必须的所有范围更改为 CDI 范围(会话、视图、请求)
- 将所有@EJB 和@ManagedProperty 更改为@Inject
但是,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 会导致此错误?
开发环境:
- 玻璃鱼 4
- Omnifaces 2.0
- JSF(Mojarra 2.2.0)
- WELD-000900 2.0.0 (SP1)
此异常表明 OmniFaces JAR(具体来说,包含提到的不明确 class 的 JAR,在您的特定情况下 EagerBeansRepository
)在运行时 classpath 中重复。如果 JAR 正确放置在 Web 应用程序的 /WEB-INF/lib
中而不是其他位置,那么如果 GlassFish 工作文件夹在部署之前没有正确清理,就会发生这种情况。特别是众所周知,GlassFish Eclipse 插件在这方面失败了。您需要手动清理 /glassfish/domains/[domainname]
.
顺便说一句,在您使用它的同时,我强烈建议您也升级到 GlassFish 4.1。 GlassFish 4.0 就像每个第一个 GlassFish 版本一样(所有的麻烦都准备好作为 "First Java EE X Application Server" 以及每个新的 Java EE API 版本)太多的童年错误。