Как управлять Обфускацией Весенних Получателей и Сеттеров в yguard - PullRequest
3 голосов
/ 13 марта 2012

Привет, я использую задачу yguard ant, чтобы запутать свой проект, он хорошо подходит для переименования моих java-классов и соответствующих bean-файлов в весенних xml-файлах, но поскольку методы getter и setter также переименовываются в java, имена свойств в весеннем внедрении не совпадает .. Так что я не могу продолжить. Кто-нибудь может сказать мне, как исключить сеттеры и геттеры одни от запутывания?

1 Ответ

3 голосов
/ 04 июля 2012

YGuard не очень хорош в этой части, но почему бы вам не попробовать ProGaurd?

Вы можете обратиться к разделу примеров ProGaurd (http://proguard.sourceforge.net/index.html#manual/examples.html), который говорит:

Обработка классов bean-компонентов

Если ваше приложение, апплет, сервлет, библиотека и т. Д. Широко используют интроспекцию классов bean-компонентов для поиска классов редактора bean-компонентов или методов получения и установки, затем конфигурированиеможет стать болезненным. Нет ничего другого, что вы можете сделать, кроме как убедиться, что имена классов бинов или имена получателей и установщиков не меняются. Например:

-keep public class mypackage.MyBean {
    public void setMyProperty(int);
    public int getMyProperty();
}

-keep public class mypackage.MyBeanEditor

Если в списке слишком много элементовявно, подстановочные знаки в именах классов и сигнатурах методов могут быть полезны. Этот пример должен охватывать все возможные установщики и получатели в классах в пакете mybeans:

-keep class mybeans.** {
    void set*(***);
    void set*(int, ***);

    boolean is*(); 
    boolean is*(int);

    *** get*();
    *** get*(int);
}

Подстановочный знак '***' соответствует любому типу (примитивили не примитив, массив или не массив.) Методы с аргументами 'int' соответствуют свойствам, которые являются списками.

, и если вы также используетеe аннотации в вашем приложении:

Внедрение ресурсов обработки

Если ваше приложение использует внедрение ресурсов в стиле Java EE, контейнер приложения автоматически назначит экземплярыклассы ресурсов для полей и методов, аннотированных @Resource.Контейнер применяет самоанализ, даже напрямую обращаясь к членам частного класса.Обычно он создает имя ресурса на основе имени типа и имени члена класса.Затем мы должны избегать удаления или переименования таких членов класса:

-keepclassmembers class * {
    @javax.annotation.Resource *;
}

. У среды Spring есть другая похожая аннотация @Autowired:

-keepclassmembers class * {
    @org.springframework.beans.factory.annotation.Autowired *;
}
...