Sto cercando di usare Maven con la seguente configurazione:Maven con Proguard e montaggio plug
- Usa Maven-assemblaggio-plugin per costruire un singolo vaso con tutte le dipendenze (montaggio: single).
- 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>