我想从命令行执行插件目标,但执行插件的多次执行。为此,我的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 。
答案 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阶段调用(再次,只是外观)。