2012-06-07 14 views
18

Sto provando a rendere ProGuard parte del nostro processo di creazione di Maven. Il problema è che il plugin Maven ufficiale utilizza ProGuard 4.3, che non supporta Java 7. C'è un modo semplice per far sì che il plugin usi Proguard 4.8?ProGuard + Maven con Java 7

Ho provato a specificare la dipendenza per il plug-in, ma ProGuard sembra avere una nuova struttura per i moduli Maven (proguard-base, proguard-genitore ecc.) Quindi il plugin non può usare nessuna versione> 4.4. Ecco come appare il mio attuale pom:

<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> 

Qualche suggerimento?

+0

La struttura di ProGuard stesso (e dei suoi vasi) non è cambiata, quindi da quel lato l'aggiornamento dovrebbe essere banale. Comunque non so di Maven o dei suoi plugin. –

risposta

23

Uso il proguard-maven-plug da com.github.wvengen. Si noti il ​​diverso groupId. In questo modo posso usare l'ultimo artefatto proguard-base 5.0. Entrambi sono in Maven Central. Ecco come la porzione di Proguard-base nel mio pom.xml sembra in questo momento: pom.xml

principale:

<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> 
[...] 

Ecco il resto della mia pom.xml bambino, ma probabilmente da modificare che:

<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> 

UPDATE: per i miei progetti Android non sto usando un plugin Proguard dedicato come Proguard-maven-plugin dal l'androide-maven-plugin gestisce la ProGuard offuscamento in sé, ed è integrato meglio nel costruire proces s per Android.

+0

funziona a causa della versione 4.9 utilizzata per java 7 –