绑定maven程序集插件两次打包阶段时执行顺序错误

时间:2014-07-24 14:06:02

标签: java maven

我想使用proguard maven插件在2个汇编描述符(文件夹格式和zip格式之一)之间执行,所以我定义了我的pom:

         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>raw-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <appendAssemblyId>false</appendAssemblyId>
                        <finalName>raw</finalName>
                        <descriptors>
                            <descriptor>src/assemble/raw.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <version>2.0.7</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>proguard</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <options>
                    <option>@${project.build.directory}/raw/proguard/proguard.cfg</option>
                </options>
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>distro-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <appendAssemblyId>false</appendAssemblyId>
                        <finalName>distro</finalName>
                        <descriptors>
                            <descriptor>src/assemble/distro.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>

但maven程序集插件总是在proguard插件之前执行2个描述符。

我使用Maven 3.2.2

谢谢,

2 个答案:

答案 0 :(得分:3)

在确定运行顺序时,Maven首先运行绑定到生命周期早期阶段的目标。如果多个目标绑定到同一阶段,则它们按照它们在POM中列出的顺序运行。

当你想多次运行一个插件时,你不会像你所示的那样添加两次插件,而是将多个执行放在一个插件中。如果您希望proguard插件在程序集之前执行,您可以将目标绑定到较早的阶段(例如prepare-package)。如果由于某种原因该阶段必须是package,那么proguard插件配置必须出现在文件中的程序集插件配置之前。

如果您需要在proguard插件执行之前运行第一个程序集执行,然后执行第二个程序集执行,那么您需要使用两个阶段。 proguard插件配置需要出现在程序集插件之前的文件中,执行应该使用阶段package。第一个程序集执行应使用prepare-package,第二个package

这是你的POM重新安排工作,所有内容都绑定到原始问题中显示的package阶段。

    <plugin>
        <groupId>com.github.wvengen</groupId>
        <artifactId>proguard-maven-plugin</artifactId>
        <version>2.0.7</version>
        <executions>
            <execution>
                <phase>package</phase>  <!-- fixed spelling -->
                <goals>
                    <goal>proguard</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <options>
                <option>@${project.build.directory}/raw/proguard/proguard.cfg</option>
            </options>
        </configuration>
    </plugin>

     <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
            <execution>
                <id>raw-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <finalName>raw</finalName>
                    <descriptors>
                        <descriptor>src/assemble/raw.xml</descriptor>
                    </descriptors>
                </configuration>
            </execution>
            <execution>
                <id>distro-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <finalName>distro</finalName>
                    <descriptors>
                        <descriptor>src/assemble/distro.xml</descriptor>
                    </descriptors>
                </configuration>
            </execution>
        </executions>
    </plugin>

答案 1 :(得分:0)

程序包中的拼写错误

<plugin>
    <groupId>com.github.wvengen</groupId>
        <artifactId>proguard-maven-plugin</artifactId>
        <version>2.0.7</version>
        <executions>
            <execution>
                <phase>packge</phase>    <--- Spelling Issue