2016-11-18 5 views
2

J'ai un projet qui fait partie d'un autre. J'utilise maven construire le processus pour faire le pot du projet. J'ai utilisé ProGuard pour obfusquer. J'ai quelques contrôleurs qui gère les demandes d'interface utilisateur.ProGuard: Le pot obscurci ne fonctionne pas mais le pot non obfusqué fonctionne

Q. Mon problème est que le pot non obfusqué fonctionne. Tous les contrôleurs sont touchés, mais le pot obfusqué ne fonctionne pas (aucun contrôleur n'est touché). Quel est le problème avec obfuscation?

Mon servlet.xml:

<context:component-scan base-package="myPackage.controllers" /> 
<mvc:annotation-driven /> 

code du contrôleur Exemple:

package myPackage.controllers.information; 

import myPackage.beans.InfoBean; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@RestController 
@RequestMapping("/information") 
public class InformationController { 

    @RequestMapping(method = RequestMethod.GET) 
    public return_bean getAllInformation() { 
     //some logic 
    } 

    @RequestMapping(value = "/{infoId}", method = RequestMethod.PUT) 
    public return_bean updateInformation(@PathVariable String InfoId, @RequestBody InfoBean info) { 
     // some logic 
    } 
} 

Mon contenu pom.xml liés à ProGuard:

<plugin> 
    <groupId>com.github.wvengen</groupId> 
    <artifactId>proguard-maven-plugin</artifactId> 
    <version>2.0.13</version> 
    <dependencies> 
     <dependency> 
      <groupId>net.sf.proguard</groupId> 
      <artifactId>proguard-base</artifactId> 
      <version>5.2.1</version> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>proguard</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <maxMemory>576m</maxMemory> 
     <obfuscate>true</obfuscate> 
     <!-- File with proguard configuration --> 
     <proguardInclude>${basedir}/proguard.conf</proguardInclude> 
     <libs> 
      <lib>${java7home}/jre/lib/rt.jar</lib> 
      <lib>${java7home}/jre/lib/jce.jar</lib> 
     </libs> 
    </configuration> 
</plugin> 

Mon contenu du fichier ProGuard.conf :

-dontnot 
-dontwarn 
-dontshrink 
-dontoptimize 
-keep public class * { public protected *;} 
-keep class myPackage.controllers.** { public protected *;} 
-keepattributes SourceFile,Signature,LineNumberTable,Exceptions, *Annotation* 
-keepparameternames 
-printmapping '${logFilesPath}/${project.artifactId}.log' 

J'ai vérifié mon pot obfuscated, toutes les annotations sont persistées. Aussi dans mon paquet d'information j'ai d'autres classes qui ont un accès au niveau du paquet seulement. Donc, ceux-ci sont obfusqués aussi. Mais toutes mes classes qui ont RequestMappings sont publiques et ne s'obscurcissent pas.

Mon environnement de fonctionnement:

1) Java 1.7 pour mon projet. Mais ce pot est placé dans se projet est en cours d'exécution sur Java 1,8

2) version ProGuard: 5.2.1

3) Printemps: 4.0.9

4) Jackson: 1.9.11

(Remarque: Un pot-ofuscated fonctionne, mais brouillées ne fonctionne pas dans l'environnement ci-dessus)

+0

Recevez-vous des erreurs lorsque le pot obfuscated commence? Recevez-vous des délais d'attente? – Zymus

+0

no. il dit juste lire et lire et ensuite préparer le pot de sortie. Quelque chose m'a manqué? En outre, il prend quelques pots à partir du dossier .m2. – SuhasD

Répondre

3

je dois ajouter suivante dans le fichier ProGuard.conf

-keepdirectories 

Les entrées d'annuaire sont supprimées par défaut dans le processus d'obfuscation. Ceci est fait pour réduire la taille du pot. Comme j'utilise la fonctionnalité "component-scan" de Spring (qui peut nécessiter une structure de répertoire), je dois le garder pour fonctionner correctement.

+0

Je voulais juste plonger plus profondément dans 'ClassPathBeanDefinitionScanner' et deviner que votre indice m'a sauvé beaucoup de temps. Merci - ça marche maintenant. –