Maven程序集插件:先决条件但不绑定

时间:2013-08-23 16:00:59

标签: maven

我知道我可以将程序集插件绑定到项目的“包”阶段,但我想要一些不同的东西:

  • 当我运行mvn package时,它会在没有汇编的情况下执行
  • 当我运行mvn assembly:single时,它将首先执行package阶段。

我知道我可以手动执行mvn package assembly:single但是这很冗长且容易出错:如果我编辑代码并忘记将“package”放入mvn assembly:single,这将生成旧版本程序集中的代码,而不编译已更改的代码。

1 个答案:

答案 0 :(得分:2)

从CLI mvn package assembly:single运行时,必须(请参阅更新)提供single目标所需的属性,这解释了为什么您会说它容易出错。< / p>

但是,如果你在build plugins部分下面的pom中添加以下插件定义:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>default-cli</id>
            <phase>never</phase> <!-- or undefined -->
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
           ...
            </configuration>
        </execution>
    </executions>
</plugin>

运行mvn clean package时,程序集插件不会运行单个目标,因为它没有绑定到任何阶段。

运行mvn clean package assembly:single时,在程序包阶段完成后,程序集:将使用您的pom because中的配置运行,它的执行ID为default-cli

更新

要纠正自己,如果从CLI运行,executions标记不仅是必需的,甚至还需要使用semantically incorrect

仅供参考,使用此插件定义:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
           <descriptor>path/to/descriptor</descriptor>
    </configuration>            
</plugin>

命令mvn assembly:single等同于命令mvn assembly:single -Ddescriptor=path/to/descriptor。运行时输出到控制台:

[INFO] --- maven-assembly-plugin:2.4:single (default-cli) @ fm-js ---

如果您想从命令行和具有不同配置的某个阶段使用插件,则第一个定义很有用。

关于你的问题,正如你所问的那样,恕我直言,如果没有重新编程插件,这是不可能的。我的建议分别是非便携式或便携式:

  • 将命令mvn package assembly:single包装在shell脚本
  • write一个带有gmaven-mojo plugin的Groovy脚本,用于召唤命令mvn package assembly:single