2012-03-13 2 views
2

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

ответ

2

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

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

Обработка боб классы

Если приложение, апплет, сервлет, библиотека и т.д., широко используют интроспекции на бобе классы, чтобы найти классы редактора компонентов, методы getter и setter, тогда конфигурация может стать болезненной. Больше нечего делать, кроме того, что имена классов 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' соответствуют свойствам, которые являются списками.

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

инъекций Обработка ресурсов

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

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

Каркас Spring имеет другой аналогичный аннотацию @Autowired:

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