簡體   English   中英

使用Proguard和匯編插件的Maven

[英]Maven with Proguard and assembly plugin

我正在嘗試使用以下配置的Maven:

  1. 使用maven-assembly-plugin構建一個包含所有依賴項的單個JAR(程序集:單個)。
  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>

兩個插件都配置為在package階段執行。 因此,我認為Maven將按照它們在pom中定義的順序執行它們。 (顯然是這樣,因為Maven 3.0.3: http ://www.mkyong.com/maven/maven-plugin-execution-order-in-same-phase/)

您是否嘗試按順序定義它們?

如果它不起作用,您可能應該嘗試在prepare-package階段運行程序集插件。

但是,我的答案只值得訂購,我不確定這是否會幫助你完成整個縮小的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM