2016-01-20 10 views
5

Chciałbym wykonać cel wtyczki z wiersza poleceń, ale wykonać wiele egzekucji wtyczki. W związku z tym moja POM wygląda następująco:Maven: wykonanie z wiersza poleceń i kilka wykonań w konfiguracji

<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> 

Co chciałbym zrobić coś takiego jak:

mvn xxx.yyy.zzz:mygoal 

i że następnie wykonać dwie egzekucje. Ale nie mogę zrozumieć, jak.

Jestem świadomy, że nie mogę użyć <id> podczas wykonywania z wiersza poleceń. Właśnie do tego służy default-cli. Jednak <id> musi być unikalny w ramach <executions>, co oznacza, że ​​mogę umieścić tylko default-cli na jednym execution.

Wersja Maven 3.0.5.

Odpowiedz

5

można zrealizować cel (i jego wykonanie) z linii poleceń, zaczynając od Maven 3.3.1 na i this nowa funkcja, za pomocą dodatkowej opcji @executionId.

Jeśli chodzi o generowanie Maven i generacji, można również sprawdzić this SO question.


Przed Maven 3.3.1 można zamiast wiązać dwie egzekucje do fazy, które normalnie nie szkodzić (jak validate) i mieć coś jak następuje:

<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> 

Następnie wykonywany:

mvn validate 

Będziesz skutecznie wykonywać dwie egzekucje tego samego celu tej samej wtyczki, jako część nieszkodliwego faza.

Jeśli nie chcesz mieć je jako część tej fazy Domyślnie (zrozumiałe), a następnie można je przenieść do profilu i aktywować go w ramach wykonania:

mvn validate -PpluginGoalExecution 

Dla kompletności , profil będzie wyglądać następująco:

<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> 

i jest rzeczą oczywistą: identyfikator profilu powinna w tym przypadku być dość oczywista, o których wtyczki i jakie celem byłoby rzeczywiście wykonać (czyli cel profil, jak zwykle).

Aktualizacja
tylko kosmetyczne, ale można również dodać do profilowanej budowie powyżej elementu:

<defaultGoal>validate</defaultGoal> 

tak, że trzeba tylko uruchomić następującą komendę Maven (tylko profil aktywacyjny):

mvn -PpluginGoalExecution 

A następnie automatycznie wykona fazę sprawdzania poprawności i skonfigurowane wykonywanie wtyczek. Nie duża zmiana (jak powiedziałem, kosmetyczne), ale może bliżej wykonania celu wtyczki niż wywołania fazy Maven (znowu, tylko pojawienie się).

+0

Dzięki. To dobra odpowiedź. Niestety nadal jestem na Maven 3.0.5. – peterh

+0

Jeśli jesteś na Maven 3.0.5, to nie jest możliwe ... Możliwe tylko poprzez profile, które mogą być aktywowane przez 'mvn -PXXX1 ...' ... – khmarbaise

+0

@peterh ok. Odpowiednio zaktualizuję swoją odpowiedź, jest sztuczka, może warto dla ciebie –

Powiązane problemy