我正在尝试将Maven与以下配置结合使用:

  • 使用maven-assembly-plugin构建具有所有依赖项的单个JAR(assembly:single)。
  • 之后使用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阶段运行程序集插件。

    但是,我的回答仅适合订购,我不确定这是否会帮助您解决整个缩水问题。

    关于maven - 带有Proguard和Assembly插件的Maven,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16846402/

    10-14 12:51
    查看更多