2016-01-20 140 views
5

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

回答

5

可以执行的命令行从Maven的3.3.1this新功能开始一个目标(及其执行),通过@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阶段调用(再次,只是外观)。

+0

谢谢。这是一个很好的答案。不幸的是我仍然在Maven 3.0.5上。 – peterh

+0

如果你使用的是Maven 3.0.5,这是不可能的......只能通过可以通过'mvn -PXXX1 ...'激活的配置文件... – khmarbaise

+0

@peterh好的我会相应地更新我的答案,它可能是值得的 –