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

InformationsquelleAutor Grant Cermak | 2010-12-10
Schreibe einen Kommentar