Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring proguard模糊处理后与相同名称和类的现有不兼容bean定义冲突_Spring_Obfuscation_Proguard - Fatal编程技术网

Spring proguard模糊处理后与相同名称和类的现有不兼容bean定义冲突

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配置,如何使用

在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避免两个类具有相同的名称,因为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