2016-01-20 183 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好的我會相應地更新我的答案,它可能是值得的 –