Maven:从命令行执行并在config

时间:2016-01-20 14:38:51

标签: java maven maven-3

我想从命令行执行插件目标,但执行插件的多次执行。为此,我的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

1 个答案:

答案 0 :(得分:6)

您可以通过@executionId附加选项从Maven 3.3.1 this新功能开始,从命令行执行目标(及其执行)。 / p>

关于Maven和执行id生成,您还可以查看this SO question

在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阶段调用(再次,只是外观)。