Maven:从命令行执行并在配置中多次执行

Maven: execution from command line and multiple executions in config

我想从命令行执行插件目标,但要执行插件的多次执行。为此,我的 POM 如下所示:

<plugin>
    <groupId>xxx.yyy</groupId>
    <artifactId>zzz</artifactId>
    <version>1.1.6</version>
    <executions>
        <execution>
            <id>default-cli-1</id>
            <goals>
                <goal>mygoal</goal>
            </goals>
            <configuration>
                .... config1 ....
            </configuration>
        </execution>
        <execution>
            <id>default-cli-2</id>
            <goals>
                <goal>mygoal</goal>
            </goals>
            <configuration>
                .... config2 ....
            </configuration>
        </execution>
    </executions>
</plugin>

我想做的是:

mvn xxx.yyy.zzz:mygoal

然后将执行两次执行。但是我想不通。

我知道从命令行执行时不能使用 <id>。这就是 default-cli 的用途。但是 <id><executions> 中必须是唯一的,这意味着我只能将 default-cli 放在一个 execution.

Maven 版本3.0.5.

您可以从 Maven 3.3.1this 新功能开始的命令行通过 @executionId 附加选项。

关于Maven和execution ids的生成,你也可以查看.


在 Maven 3.3.1 之前,您可以改为将两个执行绑定到一个通常不会造成伤害的阶段(如 validate),并具有如下内容:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <id>execution-1</id>
            <phase>validate</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>something1</classifier>
            </configuration>
        </execution>
        <execution>
            <id>execution-2</id>
            <phase>validate</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>something2</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>

然后执行:

mvn validate

作为无害阶段的一部分,您将有效地执行同一插件的同一目标的两次执行。

如果您不想默认将它们作为此阶段的一部分(可以理解),那么您可以将它们移动到一个配置文件中并将其激活为执行的一部分:

mvn validate -PpluginGoalExecution

为了完整起见,配置文件如下所示:

<profile>
    <id>pluginExecution</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                        <id>execution1</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>something1</classifier>
                        </configuration>
                    </execution>
                    <execution>
                        <id>execution2</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>something2</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

不言而喻:在这种情况下,配置文件的 id 应该非常清楚地说明它实际执行的是哪个插件和哪个目标(也就是像往常一样,配置文件的目的)。

更新
只是装饰性的,但您也可以添加到元素上方的配置文件中:

<defaultGoal>validate</defaultGoal>

这样您只需要 运行 以下 Maven 命令(仅激活配置文件):

mvn -PpluginGoalExecution

然后它会自动执行验证阶段和配置的插件执行。变化不大(正如我所说,是表面上的),但可能更接近于插件目标执行而不是 Maven 阶段调用(同样,只是外观)。