CDI部署失败:WELD-001414 Bean名称不明确

时间:2013-11-18 14:31:42

标签: java maven cdi glassfish-4 weld

我有一个应用程序,它有多个模块和各种依赖项。当我在Glassfish 4上部署应用程序时,我收到错误:

org.jboss.weld.exceptions.DeploymentException: WELD-001414 Bean name is ambiguous. 
Name    JerseyClassAnalyzer resolves to beans: [Managed Bean [class org.glassfish.jersey.internal.inject.JerseyClassAnalyzer] 
with qualifiers [@Default @Named @Any], Managed Bean 
[class org.glassfish.jersey.internal.inject.JerseyClassAnalyzer] 
with qualifiers [@Default @Named @Any]]

可能是什么原因?我已经看到了关于这个的主题,解决方案是编辑注释,但这不是我的EJB,只是一个依赖。如何避免此异常?

我正在使用Java EE 6与JDK 1.7和Glassfish 4.0。

3 个答案:

答案 0 :(得分:6)

Glassfish已经为您打包了Jerseys库,因此您需要将provided范围添加到您的Maven pom.xml中,如docs中所述。

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>

如果您使用任何泽西特定功能,您将需要直接依赖泽西岛。

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.4.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.4.1</version>
    <scope>provided</scope>
</dependency>

答案 1 :(得分:1)

您是否有机会在您的EAR文件中打包Jersey特定库。我相信glassfish确实提供了Jersey库,你不需要打包它们。

答案 2 :(得分:-1)

我认为你有两个同名的@Named bean类。