2013-05-30 14 views
6

私は次のような構成でMavenを使用しようとしています:すべての依存関係(:単一のアセンブリ)を持つ単一のJARを構築するProGuardのとMavenと組立プラグイン

  1. 利用のmaven-アセンブリのプラグイン。
  2. 後で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> 

答えて

0

どちらのプラグインがpackage相上で実行されるように構成されています。したがって、私はMavenがpomで定義されている順序でそれらを実行すると思います。 (どうやらMaven 3.0.3以降:http://www.mkyong.com/maven/maven-plugin-execution-order-in-same-phase/

あなたはそれらを順番に定義しようとしましたか?

動作しない場合は、prepare-packageフェーズでアセンブリプラグインを実行してください。

しかし、私の答えは注文のためだけに価値がありますが、それが全体的に縮小することに役立つかどうかはわかりません。

関連する問題