Pregunta

Estoy utilizando Proguard para ocultar una biblioteca que tiene varios campos @Autowired. El cambio de nombre se Ofuscador esos campos de clase (porque son privadas / interno para la clase) y por lo tanto mi frijol está fallando para crear una instancia.

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 era encontrar una manera de decirle a Proguard no confundir los campos internos que están anotados con importantes primavera-ismos (@Autowired, etc.).

Alguien tiene una idea sobre cómo puedo hacer esto de forma genérica?

Grant

¿Fue útil?

Solución 2

Yo no consideran esto una respuesta correcta a la pregunta y todavía desea una solución elegante, genérico para este problema. Lo que les dejo es mi solución temporal, que me llevó más allá de mi problema en la fuerza más bruta, forma poco elegante.

Me excluye 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 específica denominada primordial en todas y cada clase y se convertirá en una pesadilla de mantenimiento.

Una mejor respuesta sigue siendo necesaria!

Grant

Otros consejos

Yo tenía los nombres de clases de retención problema similar 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.* *;
} 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top