用弹簧处理proguard有困难

我有一个使用spring annotations extensivley的Web应用程序,我有我的proguard配置,如下所示:

-printmapping out.map -dontoptimize -keepdirectories -renamesourcefileattribute SourceFile -keepattributes Exceptions,SourceFile,LineNumberTable,*Annotation* -adaptresourcefilenames **.xsd,**.wsdl,**.xml,**.properties,**.gif,**.jpg,**.png -adaptresourcefilecontents **.xsd,**.wsdl,**.xml,**.properties,META-INF/MANIFEST.MF -dontshrink -keepclassmembernames class * { java.lang.Class class$(java.lang.String); java.lang.Class class$(java.lang.String, boolean); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keep @org.springframework.transaction.annotation.Transactional class * -keep @org.springframework.stereotype.Service class * -keep @org.springframework.stereotype.Controller class * -keep @org.springframework.beans.factory.annotation.Autowired class * -keep @org.springframework.web.bind.annotation.ResponseBody class * -keep @org.springframework.web.bind.annotation.RequestMapping class * -keep @org.springframework.stereotype.Repository class * -keep @javax.annotation.Resource class * -keep @javax.persistence.Entity class * -keep @javax.persistence.Table class * -keep @javax.persistence.Id class * -keep @javax.persistence.GeneratedValue class * -keep @javax.persistence.Column class * -keep @javax.persistence.Transient class * -keep @org.springframework.ws.server.endpoint.annotation.Endpoint class * -keep @org.springframework.ws.server.endpoint.annotation.PayloadRoot class * -keep @org.springframework.ws.server.endpoint.annotation.ResponsePayload class * 

它没有任何警告就建好了。 但是在tomcat中部署之后,在浏览器中打开页面它等待并等待没有任何结果,可能是什么问题?

我发现了问题:
proguard在运行时类型时不能特别处理带注释的类,方法和字段。 如果你使用注释的-keep选项运行proguard,它仍然会搞乱配置文件,因为它只能替换完全引用包的资源中的类,方法,字段, 当且仅当类/ field以下列方式提到: my.package.level.purpose.MyClass/my.package.level.purpose.MyClass.myField
回到注释,一个spring web应用程序充满了注释,因此它将毫无用处甚至根本没有混淆(也许只有util类才会被混淆)。
Conlusion:
没有使用混淆现代spring(3.x.x +)Web应用程序与任何混淆器甚至商业混淆器,因为它们都在代码的字节码方面工作,不会处理注释并搞乱配置文件。

您需要检查服务器日志文件以查看正在进行的操作。 如果没有明显错误,将日志记录级别更改为DEBUG将为您提供有关Spring正在执行的操作的更多信息。

FWIW,我希望基于Spring的应用程序在你尝试对它进行模糊处理时会给你带来很多问题。 Spring的DI和注释处理可能会被混淆器对类文件执行的转换所打破。 例如,如果混淆器替换类/方法名称,则注释引用另一个类或方法的名称的任何位置都将中断。

我的建议是放弃混淆是一个坏主意。