dijous, 29 / març / 2007

Frase (I)

Un Administrador de Sistemes de Windows és aquell que pensa que el "Desfragmentador de disco" no hauria d'estar a "Herramientas del sistema" sinó a "Entretenimiento".

dimecres, 7 / març / 2007

Proguard (II): Aplicacions web

Proguard ens permet agafar com a entrada (i sortida) un fitxer .war, que és una forma habitual de distribuir una aplicació web escrita en java. El problema és que no té en compte els .jsp. Per això canvia noms de classes i variables a les que es fa referència des dels .jsp sense que aquests n'estiguin informats i, conseqüentment, l'aplicació no funciona ni per casualitat. No es troben les classes.

De totes maneres podem aprofitar el Proguard d'una manera alternativa tenint en compte que perdrem, sobretot, ofuscació.

0. Sigui P0 el projecte original, i suposem que les classes es troben al subdirectori WEB-INF/classes.

1. Copiem el projecte P0 a un nou projecte (directori) PF.

2. Exportem les classes del directori WEB-INF/classes de P0 a un projecte.jar

3. Ara toca passar el projecte.jar pel ProGuard. Per fer-ho, però, hem d'afegir les següents línies al fitxer de configuració que utilitzarà el ProGuard:

-keep class * {
!private <fields>;
!private <methods>;
}

-keep interface * {
!private <methods>;
}

El que estem dient amb les opcions anteriors és que volem que es mantingui el nom de tot allò que no sigui privat. Els mètodes privats, per exemple, només es poden utilitzar dins de la mateixa classe i, per tant, no hi ha cap problema en que ho canviï. La resta, en canvi, els ha de mantenir per a que s'hi pugui accedir des dels JSP, que ProGuard no modifica.

4. Després passem projecte.jar pel proguard amb aquest últim canvi a la configuració i n'obtenim un projecte-proguard.jar

5. Col·loquem el projecte-proguard.jar al WEB-INF/lib de PF, i l'afegim al Classpath de PF. Per evitar confusions eliminem el directori WEB-INF/classes de PF.

I ja podem fer el .war.