Mit Proguard mit einer Bibliothek, die Frühlings-@Autowired verwendet namentlich
-
25-09-2019 - |
Frage
Ich verwende Proguard eine Bibliothek zu verschleiern, die mehrere @Autowired Felder. Der obfuscator wird diese Klasse Felder umbenennen (weil sie private / intern in die Klasse sind) und damit meine Bohne versagt instanziiert werden.
Pre-verschleiert:
@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 Felder zu machen, nicht autowired bekommen, aber was ich hatte gehofft, zu finden waren ein Weg, Proguard zu sagen, keine internen Felder zu verschleiern, die mit wichtigem Frühling-isms (@Autowired kommentiert werden, etc.).
Wer eine Idee hat, wie ich diese allgemein tun?
Grants
Lösung 2
Ich halte dies nicht für eine richtige Antwort auf meine Frage und würde immer noch wie eine elegante, generische Lösung für dieses Problem. Was ich Posting ist meine vorübergehende Lösung, die ich bekam Vergangenheit meines Problems in der meist Brute-Force, unelegant Art und Weise.
ich ausdrücklich diese Elemente von Verschleierung ausgeschlossen, 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, da sie spezifisch erfordert in jeder Klasse mit dem Namen überschreiben und eine Wartung Alptraum werden.
Eine bessere Antwort steht noch aus!
Grants
Andere Tipps
Ich hatte ein ähnliches Problem Halteklassennamen für simplexml kommentierten Klassen. Meine Verlegenheit war folgendes hinzuzufügen:
-keepclassmembers class * {
@org.simpleframework.xml.* *;
}
ich glaube, etwas Ähnliches würde für Sie arbeiten:
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.* *;
}