2013-05-30 13 views
6

Próbuję użyć Maven o następującej konfiguracji montaż:Maven z PROGUARD i wtyczki

  1. Zastosowanie Maven montażu plugin do zbudowania jednolitego słoik z wszystkimi zależnościami (montaż: single).
  2. Użyj wtyczki Proguard, aby wyczyścić wszystkie niepotrzebne klasy z dołączonych bibliotek.

Potrzebuję proguard, aby zmniejszyć rozmiar zależności. Używana biblioteka OpenIMAJ jest ogromna (100 MB) i potrzebuję tylko jej niewielkiego podzbioru.

Problem polega na tym, że moja obecna konfiguracja Mavena uruchamia wtyczki w odwrotnej kolejności - Proguard uruchamia się najpierw i tworzy JAR bez zależności.

sekcja Plugin mojego 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> 

Odpowiedz

0

Obie wtyczki są skonfigurowane do wykonania na etapie package. Dlatego myślę, że Maven wykona je w kolejności, w jakiej zostały zdefiniowane w pom. (Wygląda na to, że od Mavena 3.0.3: http://www.mkyong.com/maven/maven-plugin-execution-order-in-same-phase/)

Czy próbowałeś zdefiniować ich porządek?

Jeśli to nie zadziała, prawdopodobnie powinieneś spróbować uruchomić wtyczkę zespołu podczas fazy prepare-package.

Jednak moja odpowiedź jest warta tylko dla zamawiania, nie jestem pewna, czy to ci pomoże z całym kurczy się.