У меня есть библиотека Common.License который я запутывания с Proguard:Использование Proguard с библиотекой имеет @Service боб, который должен autowire
<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>
Эта библиотека имеет Spring боб с аннотацией @Service:
@Service
public class LicenseServiceImpl implements LicenseService {
@Autowired(required = false)
LicenseSessionStore licenseSessionStore;
@Autowired(required = false)
LicenseStore licenseStore;
...
}
Я использую эту библиотеку в веб-службы Company.License, где я хочу, чтобы LicenseService autowire:
@Component
public class BackgroundTasks {
@Autowired
ScheduledExecutorService scheduledExecutorService;
@Autowired
LicenseService licenseService;
...
}
Так что компания. Ликенс имеет зависимость от Common.License. Если я запутал Common.License, то licenseService
не будет автоопределяться в BackgroundTasks
. Единственный способ, которым я мог работать вокруг этого было определение LicenseService в явном виде боба:
@Bean(name = "licenseService", autowire = Autowire.BY_NAME)
public LicenseService getLicenseService() {
if (licenseService == null) {
licenseService = new LicenseServiceImpl();
}
return licenseService;
}
мне не нужно явно объявить это как боб, как это, как я уже аннотированный класс с @Service
, который должен быть достаточно чтобы сделать автопогрузку licenseService
в BackgroundTasks
Весна-волшебная работа. Но это не так!
Что делает Proguard специально для того, чтобы это не работало? Есть ли что-то, что я могу сделать в конфигурации Proguard, чтобы сделать его более дружественным к весне?
Грант
поэтому решение не было запутывание в автоматическом связывании аннотированных классов:/я не могу действительно видеть выгоду от запутывания , особенно если я расширяюсь активно использовать Spring IOC (для сервисов, dao и т. д.) – Genjuro