2010-12-09 4 views
6

Я использую Proguard для обфускации библиотеки с несколькими полями @Autowired. Обфускатор переименовывает эти поля классов (потому что они являются частными/внутренними для класса), и поэтому мой компонент не создает экземпляр.Использование Proguard с библиотекой, использующей Spring @Autowired по имени

Pre-затемненный:

@Service 
public class LicenseServiceImpl implements LicenseService { 

    @Autowired(required = false) 
    LicenseSessionStore licenseSessionStore; 

    @Autowired(required = false) 
    LicenseStore licenseStore; 

... 
} 

после запутывания:

@Service 
public class LicenseServiceImpl implements LicenseService { 

    @Autowired(required=false) 
    LicenseSessionStore a; 

    @Autowired(required=false) 
    LicenseStore b; 

... 
} 

Теперь, вероятно, много способов, чтобы сделать эти конкретные поля не получить autowired но то, что я надеялся найти было способ сообщить Proguard не обфускать любые внутренние поля, которые аннотируются важными Spring-isms (@Autowired и т. д.).

У кого-нибудь есть идея, как я могу это сделать в целом?

Грант

ответ

2

Я не считаю, что это правильный ответ на мой вопрос, и будет по-прежнему как элегантный, общее решение этой проблемы. То, что я публикую, - это мое временное решение, которое заставило меня пройти мою проблему в самой грубой силе, неэлегантно.

я явно исключен эти элементы из запутывания, добавив их в keepclassmembernames варианта:

<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option> 

Это не является предпочтительным решением, поскольку она требует специального имени переопределения в каждом классе и станет обслуживанием кошмаром.

Ответ на этот вопрос по-прежнему необходим!

Грант

3

У меня была аналогичная проблема, удерживающий имена классов для SimpleXml аннотированный классов. Мое исправление было бы добавить следующее:

-keepclassmembers class * { 
    @org.simpleframework.xml.* *; 
} 

я думаю, что-то подобное будет работать для вас:

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

 Смежные вопросы

  • Нет связанных вопросов^_^