我知道我可以将程序集插件绑定到项目的“包”阶段,但我想要一些不同的东西:
mvn package
时,它会在没有汇编的情况下执行mvn assembly:single
时,它将首先执行package
阶段。 我知道我可以手动执行mvn package assembly:single
但是这很冗长且容易出错:如果我编辑代码并忘记将“package”放入mvn assembly:single
,这将生成旧版本程序集中的代码,而不编译已更改的代码。
答案 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脚本mvn package assembly:single