2

在我混淆我的项目后出现此错误,eventghout 只有我的实现类 com.company.project.faab 由@Component("myImpl")

java.lang.IllegalStateException:bean 类 [com.company.project.faab] 的注释指定 bean 名称“myImpl”与现有的、不兼容的同名和类 [com.company.project.faaa] bean 定义冲突

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

4

4 回答 4

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 友好:)

于 2012-05-01T16:21:31.117 回答
2

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

我加了

-dontoptimize

问题就解决了

于 2012-05-04T15:29:07.233 回答
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> 
于 2017-04-12T01:10:17.220 回答
0

有时,如果您移动了类并且它指的是旧类,即使它们不存在,有时也会出现问题。

在这种情况下,只需这样做:

mvn eclipse:clean

mvn eclipse:eclipse

这对我来说效果很好。

于 2019-05-03T11:28:33.490 回答