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

после обфускации 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-компонентам иметь одно и то же имя.


person Genjuro    schedule 24.04.2012    source источник


Ответы (3)


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

@Component("myBeanName")
public class MyBean {

}
person sinuhepop    schedule 24.04.2012
comment
Даже столкнулся с подобным зондом .. У меня уже есть полнофункциональный рабочий код. И в большинстве классов используются только аннотации без указания имени bean-компонента. Теперь невозможно перейти к каждому коду и начать давать имя bean-компоненту. Не могли бы вы предложить какие-нибудь альтернативы? - person vinod hy; 09.11.2020
comment
В ProGuard есть опция -useuniqueclassmembernames, которая предотвращает создание двух классов с одинаковыми именами в разных пакетах. Но это не решает всего. Он потерпит неудачу, если вы попытаетесь получить компонент по имени программно, или если на него есть ссылка в XML (например, OP) или аннотации, и во многих других случаях. Есть еще одна опция -keepnames, чтобы указать, какие классы и их члены не должны изменять свое имя. Полезно, но используйте его осторожно, если хотите сохранить действительно запутанный код. - person sinuhepop; 11.11.2020

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

person user3009433    schedule 19.11.2013

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

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

mvn eclipse:clean

mvn eclipse:eclipse

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

person Snehal Masne    schedule 03.05.2019