私は次のような構成でMavenを使用しようとしています:すべての依存関係(:単一のアセンブリ)を持つ単一のJARを構築するProGuardのとMavenと組立プラグイン
- 利用のmaven-アセンブリのプラグイン。
- 後でProguardプラグインを使用して、含まれているライブラリからすべての不要なクラスを削除します。
私は依存関係のサイズを縮小するためにproguardが必要です。私が使用しているOpenIMAJライブラリは巨大(100MB)で、小さなサブセットしか必要ありません。
問題は、現在のMaven設定が逆の順序でプラグインを実行することです.Proguardが最初に実行され、依存関係のないJARがビルドされます。私の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>