与同名和类的现有非兼容bean定义冲突

时间:2012-04-26 17:25:54

标签: spring proguard

我混淆了我的项目后出现此错误,eventhout只有我的实现类com.company.project.f.a.a.b被@Component("myImpl")限定

  

java.lang.IllegalStateException:注释指定的bean名称   bean类的'myImpl'   [com.company.project.f.a.a.b]与现有的,不兼容的冲突   同名和类的bean定义[com.company.project.f.a.a.a]

我真的不明白为什么spring为接口和实现赋予相同的名称。我的Proguard配置可能有问题吗?

4 个答案:

答案 0 :(得分:3)

您可以尝试通过告诉proguard通过@Component选项保留as is-keep

如果您使用proguarg maven插件,可以将此选项设置为:

<plugin>
    ... ...
    <artifactId>proguard-maven-plugin</artifactId>
    ... ...
    <configuration>
        <obfuscate>true</obfuscate>
        <options>
            ... ...
            <option>-keep @org.springframework.stereotype.Component class *</option>
            ... ...
        </options>
        ... ...
    </configuration>
</plugin>

它将保持@Component组件逆向工程和Spring友好:)

答案 1 :(得分:2)

我找到了问题的根源,如果启用了优化器,Proguard合并将与其实现相互作用。

我添加了

-dontoptimize

问题解决了

答案 2 :(得分:0)

for @Component
 <option>-keep @org.springframework.stereotype.Component class *</option>
for @Controller
 <option>-keep @org.springframework.stereotype.Controller class *</option> 
for @Service
 <option>-keep @org.springframework.stereotype.Service class *</option> 

答案 3 :(得分:0)

有时候,如果您四处移动您的班级,并且它引用的是旧班级,即使它们不存在,也会出现此问题。

在这种情况下,只需执行以下操作:

mvn eclipse:clean

mvn eclipse:eclipse

这对我来说很好。