2010-12-09 6 views
6

Proguard를 사용하여 여러 개의 @Autowired 필드가있는 라이브러리를 난독 화합니다. obfuscator는 클래스 필드의 이름을 바꿉니다 (클래스의 private/internal이기 때문에). 그래서 bean이 인스턴스화에 실패했습니다.Proguard를 Spring을 사용하는 라이브러리와 함께 사용 @Autowired 이름으로

은 사전 난독 화 :

@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; 

... 
} 

지금이 특정 필드를 autowire되지 수 있도록하지만,하는 방법은 많은 가능성이있는 I이었다 찾기를 바라고 있었는지 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.* *; 
} 
내 수정 사항은 다음을 추가했다
관련 문제