2013-11-18 4 views
4

У меня есть приложение, которое имеет несколько модулей и различные зависимости. Когда я развертываю приложение на Glassfish 4, я получаю ошибку:Ошибка развертывания CDI: WELD-001414 Имя бина неоднозначно

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.

ответ

4

Glassfish уже имеет трикотажные библиотеки, упакованные для вас, поэтому вам нужно добавить область 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

Вы случайно помещаете конкретные библиотеки Джерси в свой файл EAR. Я считаю, что стеклянная рыба действительно предоставляет библиотеки Джерси, и вам не нужно их упаковывать.

+0

Правильно. Пакеты зависимостей определяют конкретные библиотеки, и это было причиной. благодаря – bilal

-1

Я думаю, что у вас есть два @Named класса компонента с тем же именем.

Смежные вопросы