2013-05-30 3 views
6

Я пытаюсь использовать Maven со следующей конфигурацией:Maven с Proguard и сборки плагина

  1. Использование Maven сборки-плагин для создания единого JAR со всеми зависимостями (сборка: одинарный).
  2. После этого используйте плагин Proguard, чтобы обрезать все ненужные классы из включенных библиотек.

Мне нужна proguard, чтобы уменьшить размер зависимостей. Библиотека OpenIMAJ, которую я использую, огромна (100 МБ), и мне нужно только небольшое ее подмножество.

Проблема в том, что моя текущая конфигурация Maven запускает плагины в противоположном порядке - Proguard запускается первым и создает JAR без зависимостей.

Plugin часть моего 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.

Однако, мой ответ стоит только для заказа, я не уверен, что это поможет вам со всей сокращающейся вещью.