我正在使用Proguard来混淆具有多个@Autowired字段的库。混淆器正在重命名那些类字段(因为它们是类的私有/内部),因此我的bean无法实例化。
预混淆:
@Service
public class LicenseServiceImpl implements LicenseService {
@Autowired(required = false)
LicenseSessionStore licenseSessionStore;
@Autowired(required = false)
LicenseStore licenseStore;
...
}
后混淆:
@Service
public class LicenseServiceImpl implements LicenseService {
@Autowired(required=false)
LicenseSessionStore a;
@Autowired(required=false)
LicenseStore b;
...
}
现在可能有很多方法可以使这些特定字段无法自动连接,但我希望找到的方法是告诉Proguard不要混淆任何带有重要Spring-isms注释的内部字段(@Autowired,等)。
任何人都知道我一般如何做到这一点?
捐赠
答案 0 :(得分:3)
我在为simplexml注释类保留类名时遇到了类似的问题。我的修复是添加以下内容:
-keepclassmembers class * {
@org.simpleframework.xml.* *;
}
我认为类似的东西对你有用:
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.* *;
}
答案 1 :(得分:2)
我不认为这是对我的问题的正确答案,并且仍然希望这个问题的优雅,通用的解决方案。我发布的是我的临时解决方法,让我以最蛮力,不优雅的方式解决了我的问题。
我通过将这些项添加到keepclassmembernames选项中明确地将这些项排除在混淆之外:
<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option>
这不是首选解决方案,因为它需要在每个班级中进行特定的命名覆盖,并且将成为维护的噩梦。
仍然需要更好的答案!
捐赠