2012-06-07 28 views
18

Estoy tratando de hacer que ProGuard sea parte de nuestro proceso de compilación Maven. El problema es que el plugin oficial de Maven usa ProGuard 4.3, que no es compatible con Java 7. ¿Hay alguna manera fácil de hacer que el complemento use Proguard 4.8?ProGuard + Maven con Java 7

He intentado especificar la dependencia para el complemento, pero ProGuard parece tener una nueva estructura para Maven-modules (proguard-base, proguard-parent, etc.) por lo que el complemento no puede usar ninguna versión> 4.4. Así es como se ve mi pom actual:

<plugin> 
       <groupId>com.pyx4me</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>proguard</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <proguardVersion>4.8</proguardVersion> 
        <obfuscate>true</obfuscate> 
        <options> 
         <option>-allowaccessmodification</option> 
         <option>-keep public class com.degoo.ui.ClientBackendStarter { public *; public static *; }</option> 
        </options> 
        <injar>${project.build.finalName}.jar</injar> 
        <outjar>${project.build.finalName}-small.jar</outjar> 
        <outputDirectory>${project.build.directory}</outputDirectory> 
        <libs> 
         <lib>${java.home}/lib/rt.jar</lib> 
         <lib>${java.home}/lib/jsse.jar</lib> 
        </libs> 
        <addMavenDescriptor>false</addMavenDescriptor> 
       </configuration> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard</artifactId> 
         <version>4.8</version> 
         <scope>runtime</scope> 
        </dependency> 
       </dependencies> 
      </plugin> 

¿Alguna sugerencia?

+0

La estructura de ProGuard (y sus jarras) no ha cambiado, por lo que desde ese lado, la actualización debe ser trivial. Aunque no sé nada sobre Maven o sus complementos. –

Respuesta

23

Uso el proguard-maven-plugin de com.github.wvengen. Tenga en cuenta los diferentes groupId. De esa forma puedo usar el último artefacto 5.0 proguard-base. Ambos están en Maven Central. Así es como la parte Proguard-base en mi pom.xml se ve ahora: pom.xml

Padres:

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>com.github.wvengen</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <version>2.0.8</version> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard-base</artifactId> 
         <version>5.0</version> 
         <scope>runtime</scope> 
        </dependency> 
       </dependencies> 
      </plugin> 
[...] 

Aquí está el resto de mi pom.xml niño, pero es probable que desea modificar:

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.github.wvengen</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>process-classes-with-proguard</id> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>proguard</goal> 
        </goals> 
        <configuration> 
         <maxMemory>256m</maxMemory> 
         <injar>classes</injar> 
         <libs> 
          <lib>${rt.jar.path}</lib> 
          <lib>${jsse.jar.path}</lib> 
         </libs> 
         <obfuscate>true</obfuscate> 
         <attach>true</attach> 
         <addMavenDescriptor>false</addMavenDescriptor> 
         <proguardInclude>${project.basedir}/proguard.conf</proguardInclude> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

ACTUALIZACIÓN: Para mis proyectos Android no estoy usando un plugin Proguard dedicada como Proguard-experto-plugin desde el androide-experto-plugin se encarga de la propia ofuscación ProGuard, y se integra mejor en la construcción proces s para Android.

+0

esto funciona debido a la versión 4.9 que se utiliza para java 7 –