2

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

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

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

4

1 回答 1

2

从 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 脚本中
  • 使用gmaven-mojo 插件编写一个调用命令的 Groovy 脚本mvn package assembly:single
于 2013-08-23T16:43:43.327 回答