3

嗨,我使用 yguard ant 任务来混淆我的项目,它可以很好地重命名我的 java 类和 spring xml 文件中的相应 bean,但是由于 getter 和 setter 方法也在 java 中重命名,所以 spring 注入中的属性名称不匹配..所以我无法继续。谁能告诉我如何单独排除 setter 和 getter 的混淆?

4

1 回答 1

3

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 *;
}
于 2012-07-04T10:30:48.903 回答