2010-12-09 9 views
6

Estoy utilizando Proguard para ofuscar una biblioteca que tiene varios campos @Autowired. El ofuscador está renombrando esos campos de clase (porque son privados/internos a la clase) y, por lo tanto, mi bean no puede crear instancias.Uso de Proguard con una biblioteca que utiliza Spring @Autowired por nombre

Pre-ofuscado:

@Service 
public class LicenseServiceImpl implements LicenseService { 

    @Autowired(required = false) 
    LicenseSessionStore licenseSessionStore; 

    @Autowired(required = false) 
    LicenseStore licenseStore; 

... 
} 

Post-ofuscación:

@Service 
public class LicenseServiceImpl implements LicenseService { 

    @Autowired(required=false) 
    LicenseSessionStore a; 

    @Autowired(required=false) 
    LicenseStore b; 

... 
} 

Ahora bien, hay probablemente un montón de maneras de hacer estos campos particulares no consiguen autowired pero lo que yo esperaba encontrar era una forma de decirle a Proguard que no ofusque ningún campo interno anotado con importantes ismos de primavera (@Autowired, etc.).

¿Alguien tiene una idea sobre cómo puedo hacer esto genéricamente?

subvención

Respuesta

2

no considero esto una respuesta correcta a la pregunta y todavía desea una solución elegante, genérico para este problema. Lo que estoy publicando es mi solución temporal que me permitió superar mi problema de la manera más bruta y poco elegante.

I excluidos explícitamente estos artículos de la ofuscación añadiéndolos en una opción keepclassmembernames:

<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option> 

Esto no es una solución preferida, ya que requiere primordial llamado específico en cada clase y se convertirá en una pesadilla de mantenimiento.

¡Aún se necesita una mejor respuesta!

subvención

3

tuve un problema similar retener los nombres de clase para las clases SimpleXML anotada. Mi solución fue añadir lo siguiente:

-keepclassmembers class * { 
    @org.simpleframework.xml.* *; 
} 

creo que algo similar podría funcionar para usted:

-keepclassmembers class * { 
    @org.springframework.beans.factory.annotation.* *; 
} 
Cuestiones relacionadas