我混淆了我的项目后出现此错误,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配置可能有问题吗?
答案 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
这对我来说很好。