嗨,我使用 yguard ant 任务来混淆我的项目,它可以很好地重命名我的 java 类和 spring xml 文件中的相应 bean,但是由于 getter 和 setter 方法也在 java 中重命名,所以 spring 注入中的属性名称不匹配..所以我无法继续。谁能告诉我如何单独排除 setter 和 getter 的混淆?
1 回答
YGuard 在这方面不是很好,但是你为什么不试试 ProGaurd 呢?
您可以参考 ProGaurd 示例部分(http://proguard.sourceforge.net/index.html#manual/examples.html),其中说:
处理 bean 类
如果您的应用程序、applet、servlet、库等广泛使用对 bean 类的自省来查找 bean 编辑器类或 getter 和 setter 方法,那么配置可能会变得很痛苦。除了确保 bean 类名称或 getter 和 setter 名称不会更改之外,您无能为力。例如:
-keep public class mypackage.MyBean {
public void setMyProperty(int);
public int getMyProperty();
}
-keep public class mypackage.MyBeanEditor
如果要显式列出的元素太多,类名和方法签名中的通配符可能会有所帮助。此示例应包含 mybeans 包中的类中所有可能的 setter 和 getter:
-keep class mybeans.** {
void set*(***);
void set*(int, ***);
boolean is*();
boolean is*(int);
*** get*();
*** get*(int);
}
'***' 通配符匹配任何类型(原始或非原始、数组或非数组)。带有“int”参数的方法匹配列表属性。
如果您还在应用程序中使用注释:
处理资源注入
如果您的应用程序使用 Java EE 风格的资源注入,应用程序容器将自动将资源类的实例分配给使用 @Resource 注释的字段和方法。容器应用自省,甚至直接访问私有类成员。它通常根据类型名称和类成员名称构造资源名称。然后我们必须避免这些类成员被删除或重命名:
-keepclassmembers class * {
@javax.annotation.Resource *;
}
Spring框架还有另一个类似的注解@Autowired:
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.Autowired *;
}