Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Конфликтует с существующим несовместимым определением bean-компонента с тем же именем и классом после обфускации proguard

Автор вопроса: GenjuroОтветов: 3

после обфускации Proguard я получаю следующую ошибку:

Неожиданное исключение при синтаксическом анализе XML-документа из ресурса ServletContext [/WEB-INF/applicationContext.xml]; вложенное исключение - java.lang.IllegalStateException: указанное в аннотации имя bean-компонента 'a' для класса bean-компонента [com.company.project.baaa] конфликтует с существующим несовместимым определением bean-компонента с тем же именем и классом [com.company.project. аа]

Я использую конфигурацию Spring на основе аннотаций, как я могу избежать использования двух классов с одинаковым именем с помощью Proguard, потому что Spring не позволяет двум bean-компонентам иметь одно и то же имя.

proguardobfuscationspring

Ответы

Ответ 1 · рейтинг 15 · sinuhepop

Я не уверен, что это то, что вы хотите, но вы можете указать имя bean-компонента в значении @Component (и стереотипах @Repository, @Service и @Controller):

@Component("myBeanName")
public class MyBean {

}

Ответ 2 · рейтинг 1 · user3009433

Другая причина; у вас могут быть разные версии Spring в вашем пути к классам, например, spring 2.x с spring 3.x. В таком состоянии бобы как бы загружаются дважды. Если вы используете maven, проверьте, не импортирует ли модуль старую версию Spring (mvn dependency: tree), и удалите ее, исключив задействованный артефакт Spring (исключения).

Ответ 3 · рейтинг 1 · Snehal Masne

У меня была та же проблема, и больше ничего не помогало. Иногда проблема возникает, если вы переместили свои классы, и это относится к старым классам, даже если они не существуют.

В этом случае просто сделайте следующее:

mvn eclipse:clean

mvn eclipse:eclipse

У меня это сработало.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы