Usando o ProGuard com uma biblioteca que usa o Spring @Autowired By Name
-
25-09-2019 - |
Pergunta
Estou usando o ProGuard para ofuscar uma biblioteca que possui vários campos @Autowired. O ofuscador está renomeando esses campos de classe (porque são privados/internos da classe) e, portanto, meu feijão está falhando em instanciar.
Pré-obscado:
@Service
public class LicenseServiceImpl implements LicenseService {
@Autowired(required = false)
LicenseSessionStore licenseSessionStore;
@Autowired(required = false)
LicenseStore licenseStore;
...
}
Pós-obscation:
@Service
public class LicenseServiceImpl implements LicenseService {
@Autowired(required=false)
LicenseSessionStore a;
@Autowired(required=false)
LicenseStore b;
...
}
Agora, provavelmente existem muitas maneiras de fazer com que esses campos específicos não sejam atendidos automaticamente, mas o que eu esperava encontrar era uma maneira de dizer a Proguard para não ofuscar nenhum campo interno que seja anotado com importantes iss de mola (@Autowired, etc.) .
Alguém tem uma ideia de como posso fazer isso genericamente?
Conceder
Solução 2
Não considero isso uma resposta correta para minha pergunta e ainda gostaria de uma solução genérica elegante e genérica para esse problema. O que estou postando é a minha solução temporária que me levou a passar do meu problema da maneira mais bruta e deselega.
Excluí explicitamente esses itens da ofuscação, adicionando -os a uma opção KeepClassMemberNames:
<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option>
Esta não é uma solução preferida, pois requer uma substituição específica em todas as classes e se tornará um pesadelo de manutenção.
Uma resposta melhor ainda é necessária!
Conceder
Outras dicas
Eu tive um problema semelhante retendo nomes de classe para classes anotadas simpexml. Minha correção era adicionar o seguinte:
-keepclassmembers class * {
@org.simpleframework.xml.* *;
}
Eu acho que algo semelhante funcionaria para você:
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.* *;
}