Tôi cố gắng để sử dụng Maven với cấu hình sau:Maven với Proguard và lắp ráp Plugin
- Sử dụng maven-lắp ráp-plugin để xây dựng một JAR duy nhất với tất cả phụ thuộc (lắp ráp: duy nhất).
- Sử dụng plugin Proguard sau đó để cắt bớt tất cả các lớp không cần thiết khỏi các thư viện được bao gồm.
Tôi cần proguard để thu nhỏ kích thước của các phụ thuộc. Thư viện OpenIMAJ tôi đang sử dụng là rất lớn (100MB), và tôi chỉ cần một tập con nhỏ của nó.
Vấn đề là cấu hình Maven hiện tại của tôi chạy các trình cắm theo thứ tự ngược lại - Proguard chạy trước và xây dựng một JAR mà không có sự phụ thuộc.
phần Plugin của pom.xml của tôi:
<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>