Maven:从命令行执行并在配置中执行多个
问题描述:
我想从命令行执行一个插件目标,但执行插件的多次执行。为此我POM看起来是这样的:Maven:从命令行执行并在配置中执行多个
<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.1上this新功能开始一个目标(及其执行),通过@executionId
附加选项。
关于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阶段调用(再次,只是外观)。
谢谢。这是一个很好的答案。不幸的是我仍然在Maven 3.0.5上。 – peterh
如果你使用的是Maven 3.0.5,这是不可能的......只能通过可以通过'mvn -PXXX1 ...'激活的配置文件... – khmarbaise
@peterh好的我会相应地更新我的答案,它可能是值得的 –