2013-05-30 8 views
6

Sto cercando di usare Maven con la seguente configurazione:Maven con Proguard e montaggio plug

  1. Usa Maven-assemblaggio-plugin per costruire un singolo vaso con tutte le dipendenze (montaggio: single).
  2. Utilizzare successivamente il plugin Proguard per eliminare tutte le classi non necessarie dalle librerie incluse.

Ho bisogno di proguard per ridurre le dimensioni delle dipendenze. La libreria OpenIMAJ che sto usando è enorme (100 MB) e ho solo bisogno di un piccolo sottoinsieme.

Il problema è che il mio attuale Maven config esegue i plug-in in ordine inverso - Proguard viene eseguito per primo e crea un JAR senza le dipendenze.

sezione Plugin della mia pom.xml:

<plugins> 
    <plugin> 
     <groupId>com.github.wvengen</groupId> 
     <artifactId>proguard-maven-plugin</artifactId> 
     <version>2.0.6</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals><goal>proguard</goal></goals> 
      </execution> 
     </executions> 
     <dependencies> 
      <dependency> 
       <groupId>net.sf.proguard</groupId> 
       <artifactId>proguard-base</artifactId> 
       <version>4.9</version> 
       <scope>runtime</scope> 
      </dependency> 
     </dependencies> 
     <configuration> 
      <proguardVersion>4.9</proguardVersion> 
      <options> 
       <option>-verbose</option> 
       <option>-dontobfuscate</option> 
       <option>-dontoptimize</option> 
       <option>-keep class org.apache.** { *; }</option> 
       <option>-keep class no.** { *; }</option> 
      </options> 
      <libs> 
       <lib>${java.home}/lib/rt.jar</lib> 
       <lib>${java.home}/lib/jsse.jar</lib> 
      </libs> 
     </configuration> 

    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.0</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
    </plugin> 

    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
      <archive> 
       <manifest> 
        <mainClass>fully.qualified.MainClass</mainClass> 
       </manifest> 
      </archive> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     <executions> 
      <execution> 
       <id>make-assembly</id> <!-- this is used for inheritance merges --> 
       <phase>package</phase> <!-- bind to the packaging phase --> 
       <goals> 
        <goal>single</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

risposta

0

Sia plug-in sono configurati per essere eseguito sulla fase package. Pertanto, penso che Maven li eseguirà nell'ordine in cui sono definiti nel pom. (Apparentemente sì, dal momento che Maven 3.0.3: http://www.mkyong.com/maven/maven-plugin-execution-order-in-same-phase/)

Hai provato a definirli l'ordine intorno?

Se non funziona, è consigliabile provare a eseguire il plug-in di assembly durante la fase prepare-package.

Tuttavia, la mia risposta vale solo per l'ordine, non sono sicuro che questo vi aiuterà con l'intera cosa restringente.