Spring proguard模糊处理后与相同名称和类的现有不兼容bean定义冲突
在Proguard模糊处理后,我得到以下错误: 从ServletContext资源分析XML文档时发生意外异常 [/WEB-INF/applicationContext.xml];嵌套异常是 java.lang.IllegalStateException:注释指定的bean名称“a” 对于bean类[com.company.project.b.a.a.a]与现有, 相同名称和类的不兼容bean定义 [com.company.project.a.a]Spring proguard模糊处理后与相同名称和类的现有不兼容bean定义冲突,spring,obfuscation,proguard,Spring,Obfuscation,Proguard,在Proguard模糊处理后,我得到以下错误: 从ServletContext资源分析XML文档时发生意外异常 [/WEB-INF/applicationContext.xml];嵌套异常是 java.lang.IllegalStateException:注释指定的bean名称“a” 对于bean类[com.company.project.b.a.a.a]与现有, 相同名称和类的不兼容bean定义 [com.company.project.a.a] 我使用的是基于注释的spring配置,如何使用
我使用的是基于注释的spring配置,如何使用Proguard避免两个类具有相同的名称,因为spring不允许两个bean具有相同的名称。我不确定这是否是您想要的,但您可以在@Component(以及原型@Repository、@Service和@Controller)值中指定bean名称:
另一个原因;您的类路径中可能有不同版本的Spring,例如Spring2.x和Spring3.x。在这种情况下,bean似乎要加载两次。如果您使用maven,请检查模块是否未导入旧版本的Spring(mvn依赖项:tree),并通过排除涉及的Spring工件(排除项)将其删除。我也遇到了同样的问题,没有任何其他帮助。有时,如果您移动了类,并且它引用了旧类,即使它们不存在,也会出现问题 在这种情况下,只需执行以下操作:
mvn eclipse:clean
mvn eclipse:eclipse
这对我来说很有效。即使是我也面临着类似的问题。。我已经有了一个功能齐全的工作代码。在大多数类中,只使用注释而不指定bean名称。现在很难找到每一个代码并开始给bean命名。您能推荐一些替代方案吗?ProGuard有一个选项
-useuniqueclassmembernames
,它可以防止在不同的包中生成两个同名的类。但这并不能解决所有问题。如果您试图以编程方式按名称获取bean,或者在XML(如OP)或注释中引用bean,以及其他许多情况下,它将失败。还有另一个选项-keepnames
来指定哪些类及其成员不能更改其名称。很有用,但是如果您想保留一个真正模糊的代码,请小心使用它。
mvn eclipse:clean
mvn eclipse:eclipse