2014-01-07 4 views
1

Как я могу игнорировать мой плагин (maven-antrun-plugin) во время сборки или развертывания?Игнорировать maven плагин во время сборки

Я создаю исходные файлы из инструмента IDL (написанного на C). Я использовал maven-antrun-plugin для создания источника и применил его к фазе generate-sources. Наряду с build-helper-maven-plugin источник java, сгенерированный инструментом IDL, депонируется в папке сгенерированных источников и, в конечном счете, включен в упаковку банкомата в качестве источника. Отлично!

Вот что я использую в моей Maven сборки:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <configuration> 
         <tasks> 
          <mkdir dir="target/generated-sources/" /> 
          <!-- other task stuff here --> 
         </tasks> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <id>add-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>target/generated-sources/gen-java</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Однако теперь проблема заключается в том, что наша команда направлена ​​не использовать инструмент IDL в нашей непрерывной (CI) среды интеграции; плагин не будет работать в CI, потому что инструмент IDL не установлен. В результате я должен проверить сгенерированный источник (с другим кодом под src/main/java) на наш репозиторий GIT.

Я хотел бы иметь возможность по-прежнему запускать maven-antrun-plugin, но отделить его от фазы generated-sources или любого жизненного цикла, чтобы среда CI могла запускать мою сборку. Я буду запускать плагин вручную/локально, когда я сделаю изменения, чтобы источник был сгенерирован, а затем был включен в репозиторий GIT.

Возможно ли это? Как я могу игнорироватьmaven-antrun-plugin во время сборки или развертывания?

+2

'profiles' были созданы для решения таких проблем! –

+0

Хорошо ... Я просмотрю профили. – whyceewhite

+0

Профили отлично работали! – whyceewhite

ответ

1

как это было предложено в комментаторе (Джаррод Роберсон), Maven профили может быть использован, чтобы игнорировать поколение источников в maven-antrun-plugin плагине.

В частности, добавление блока profiles, показанного ниже, решает проблему. Профиль default-profile: активирован по умолчанию; он не содержит блок maven-antrun-plugin. Однако generate-source-profile содержит maven-antrun-plugin, который инициирует генерацию источников.

<profiles> 

    <profile> 
     <id>default-profile</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.1</version> 
        <configuration> 
         <source>1.7</source> 
         <target>1.7</target> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

    <profile> 
     <id>generate-sources-profile</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.1</version> 
        <configuration> 
         <source>1.7</source> 
         <target>1.7</target> 
        </configuration> 
       </plugin> 
       <plugin> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>generate-sources</id> 
          <phase>generate-sources</phase> 
          <configuration> 
           <tasks> 
            <mkdir dir="target/generated-sources/" /> 
            <!-- other task stuff here --> 
           </tasks> 
          </configuration> 
          <goals> 
           <goal>run</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

</profiles> 

Таким образом, непрерывная интеграция (CI) инструмент будет делать нормальные сборки и развертывание (МВНА развернуть). Когда я хочу генерировать источники, я запускаю профиль генерирующих источников, выполняя, например, mvn clean install -P generate-sources-profile.

+0

поздравления, это самое идиоматическое и поддерживаемое решение –

0

Вы можете использовать profiles или просто пропустить maven-antrun-plugin исполнение

skip - Указывает, должен ли быть пропущен выполнение Antrun.

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>generate-sources</id> 
      <phase>generate-sources</phase> 
      <configuration> 
       <skip>${skipAntRunForMe}</skip> 
       <tasks> 
        <mkdir dir="target/generated-sources/"/> 
        <!-- other task stuff here --> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

И inovke цель с парами -DskipAntRunForMe

Смежные вопросы