Mit Proguard mit Bibliothek hat eine @ - Service-bean sollte autowire
Habe ich eine Bibliothek Üblich.Lizenz, die ich bin Verschleierung mit Proguard:
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<options>
<option>-dontoptimize</option>
<option>-renamesourcefileattribute SourceFile</option>
<option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod</option>
<option>-keep public class * { public protected *;}</option>
<option>-keepclassmembernames class * {java.lang.Class class$(java.lang.String); java.lang.Class class$(java.lang.String, boolean);}</option>
<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore;}</option>
<option>-keepclassmembers enum * {public static **[] values(); public static ** valueOf(java.lang.String);}</option>
<option>-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}</option>
</options>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jsse.jar</lib>
</libs>
<addMavenDescriptor>false</addMavenDescriptor>
</configuration>
</plugin>
Diese Bibliothek hat eine Spring-bean annotiert mit @Service:
@Service
public class LicenseServiceImpl implements LicenseService {
@Autowired(required = false)
LicenseSessionStore licenseSessionStore;
@Autowired(required = false)
LicenseStore licenseStore;
...
}
Ich diese library in ein web-service-Unternehmen.Lizenz, wo ich will die LicenseService zu autowire:
@Component
public class BackgroundTasks {
@Autowired
ScheduledExecutorService scheduledExecutorService;
@Autowired
LicenseService licenseService;
...
}
So Unternehmen.Die Lizenz hat eine Abhängigkeit auf Gemeinsame.Lizenz. Wenn ich verschleiern Üblich.Lizenz dann licenseService
wird nicht autowire in BackgroundTasks
. Der einzige Weg, ich könnte arbeiten, um dieses zu bestimmen, licenseService explizit als bean:
@Bean(name = "licenseService", autowire = Autowire.BY_NAME)
public LicenseService getLicenseService() {
if (licenseService == null) {
licenseService = new LicenseServiceImpl();
}
return licenseService;
}
Ich muss nicht ausdrücklich erklären, dass diese wie eine Bohne wie diese, wie ich bereits kommentierte die Klasse mit @Service
die genug sein sollte, um die autowiring von licenseService
im BackgroundTasks
Frühjahr-magisch zu arbeiten. Aber es funktioniert nicht!
Was ist Proguard konkret tun, um diese nicht funktionieren? Gibt es irgendetwas, was ich tun kann in der Konfiguration des Proguard zu machen, Frühlings-freundlich?
Gewähren
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein großes Dankeschön an Eric Lafortune für das helfen mich in die richtige Richtung hier:
http://sourceforge.net/projects/proguard/forums/forum/182456/topic/2547498
Hier ist das arbeiten pom-Datei neben der Angabe der plug-in-Optionen erforderlich:
HINWEIS! Sie benötigen ProGuard 4.4, die neueste version von ProGuard-Maven-Plugin (2.0.4) 4.3 verwendet, so dass Sie Bearbeiten müssen:
Haben die 4.4 Abhängigkeit (so):
Hier ist ein weiterer Weg, um das Gerät auf die version 4.4 von proguard (was wohl ein bisschen besser):
Ich hatte das gleiche Problem und die -keepdirectories Richtlinie dazu beigetragen, lösen das Problem für mich.