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

Foi útil?

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.* *;
} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top