我知道我可以将程序集插件绑定到项目的“包”阶段,但我想要一些不同的东西:
- 当我运行
mvn package
时,它会在没有组装的情况下执行 - 当我运行
mvn assembly:single
它时,它会首先执行package
阶段。
我知道我可以mvn package assembly:single
手动完成,但这很冗长且容易出错:如果我编辑代码并忘记将“包”放入mvn assembly:single
中,这将在程序集中生成旧版本的代码,而无需编译更改的代码。
我知道我可以将程序集插件绑定到项目的“包”阶段,但我想要一些不同的东西:
mvn package
时,它会在没有组装的情况下执行mvn assembly:single
它时,它会首先执行package
阶段。我知道我可以mvn package assembly:single
手动完成,但这很冗长且容易出错:如果我编辑代码并忘记将“包”放入mvn assembly:single
中,这将在程序集中生成旧版本的代码,而无需编译更改的代码。
从 CLI 运行时,mvn package assembly:single
您必须(请参阅更新)为单个目标提供所需的属性,这解释了为什么您会说它容易出错。
但是,如果您在构建插件部分下将以下插件定义添加到您的 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
,在打包阶段完成后,assembly:single 将使用您的 pom 中的配置运行,因为它的执行 ID 是default-cli
.
为了纠正我自己,如果从 CLI 运行,该executions
标签不仅是不必要的,而且使用起来在语义上甚至是不正确的。
仅供参考,使用此插件定义:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptor>path/to/descriptor</descriptor>
</configuration>
</plugin>
commandmvn assembly:single
等价于 command 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