带有混淆类的ConflictingBeanDefinitionException

时间:2017-08-01 17:29:20

标签: java spring spring-boot proguard obfuscation

我正在尝试使用 Proguard 来混淆Spring Boot应用程序。 Proguard按字母顺序重命名包和类,所以我将使用 a.a,a.b,a.c,b.a和b.b 等类<...

我的问题是@RestController,@ Configuration,带有相同名称的@Service注释类(即使在不同的包中)会产生以下异常

  

在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanDefinitionStoreException:无法解析配置类[com.test.sirh.CoreApp];嵌套异常是

     

org.springframework.context.annotation.ConflictingBeanDefinitionException:bean类[com.test.sirh.gac]的注释指定bean名称'c'与同名和类的现有非兼容bean定义冲突[com.test.sirh.bc]

保留带有这些注释的类可以解决问题,但我最终会得到几乎一半没有混淆的类。 无论如何,Proguard按字母顺序生成类(不会改变),但不会从每个包中的“a”返回?最后我得到了a.a,a.b,a.c和b.d(而不是b.a)。

是的,我保留了注释。只是混淆了类/类成员的名字。

我的选择:

<options>
    <option>-injar ${project.build.directory}/classes</option>
    <option>-outjar ${project.build.directory}/proguard-obf-classes </option>
    <option>-target 1.8</option>    
    <option>-dontshrink</option>
    <option>-dontoptimize</option>
    <option>-dontusemixedcaseclassnames</option>
    <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option> 
    <option>-keepparameternames</option>    
    <option>-keepclasseswithmembers public class * {public static void main(java.lang.String[]);}</option>
    <option>-keep @org.springframework.context.annotation.Configuration public class *</option>
    <option>-keepclassmembers enum * { *; } </option>
</options>

谢谢。

0 个答案:

没有答案