2010-12-09 7 views
6

Ich verwende Proguard, um eine Bibliothek zu verschleiern, die mehrere @Autowired-Felder enthält. Der Obfuscator benennt diese Klassenfelder um (weil sie privat/intern für die Klasse sind) und daher kann meine Bean nicht instanziiert werden.Verwenden von Proguard mit einer Bibliothek, die Spring @Autowired nach Name verwendet

Pre-verschleierten:

@Service 
public class LicenseServiceImpl implements LicenseService { 

    @Autowired(required = false) 
    LicenseSessionStore licenseSessionStore; 

    @Autowired(required = false) 
    LicenseStore licenseStore; 

... 
} 

Post-Verschleierung:

@Service 
public class LicenseServiceImpl implements LicenseService { 

    @Autowired(required=false) 
    LicenseSessionStore a; 

    @Autowired(required=false) 
    LicenseStore b; 

... 
} 

Nun gibt es wahrscheinlich eine Menge Möglichkeiten, diese bestimmten Bereichen nicht erhalten autowired zu machen, aber was ich hatte gehofft, war zu finden eine Möglichkeit, Proguard zu sagen, keine internen Felder zu verschleiern, die mit wichtigen Spring-Ismen versehen sind (@Autowired, etc.).

Wer hat eine Idee, wie ich das generisch machen kann?

Grant-

Antwort

2

ich eine auf meine Frage richtige Antwort dies nicht berücksichtigen und möchte noch eine elegante, generische Lösung für dieses Problem. Was ich poste, ist meine temporäre Workaround, die mich in brutalster, uneleganter Weise an meinem Problem vorbeigeführt hat.

ich ausgeschlossen ausdrücklich diese Elemente aus Verschleierungs indem sie in eine keepclassmembernames Option hinzufügen:

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

Dies ist keine bevorzugte Lösung ist, da es speziell genannte übergeordnete in jeder Klasse erfordert und eine Wartung Alptraum werden.

Eine bessere Antwort wird noch benötigt!

Grant-

3

hatte ich ein ähnliches Problem Klassennamen für simplexml kommentierten Klassen zu halten. Meine Verlegenheit war folgendes hinzuzufügen:

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

Ich denke, etwas ähnliches für Sie arbeiten würde:

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