Отключить плагин Maven, определенный в родительском POM

Я использую родительский POM, который определяет плагин, который я не хочу запускать в дочернем POM. Как полностью отключить плагин в дочернем помпе?

Ограничение: Я не могу изменить сам родительский POM.

4 ответа

Решение

Следующее работает для меня при отключении Findbugs в дочернем POM:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

Примечание: полное определение плагина Findbugs находится в нашем родительском / супер-POM, поэтому он унаследует версию и так далее.

В Maven 3 вам нужно будет использовать:

 <configuration>
      <skip>true</skip>
 </configuration>

для плагина.

Посмотрите, есть ли у плагина параметр конфигурации "пропустить". Почти все делают. если это так, просто добавьте его в объявление дочернего элемента:

<plugin>
   <groupId>group</groupId>
   <artifactId>artifact</artifactId>
   <configuration>
     <skip>true</skip>
   </configuration>
</plugin>

Если нет, то используйте:

<plugin>    
<groupId>group</groupId>   
 <artifactId>artifact</artifactId>    
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>    
</executions>  
</plugin>

Нить старая, но может кто-то еще заинтересовался. Самая короткая форма, которую я нашел, - это дальнейшее улучшение на примере из λlex и bmargulies. Тег выполнения будет выглядеть так:

<execution>
    <id>TheNameOfTheRelevantExecution</id>
    <phase/>
</execution>

2 балла, которые я хочу выделить:

  1. Фаза не установлена, что выглядит менее хакерски, чем "нет", хотя все еще хак.
  2. id должен совпадать с исполнением, которое вы хотите переопределить. Если вы не укажете id для выполнения, Maven сделает это неявно (таким образом, вы не ожидаете этого интуитивно).

После публикации обнаружил, что он уже находится в stackru: в многомодульном проекте Maven, как я могу отключить плагин в одном дочернем элементе?

Я знаю, что эта ветка действительно старая, но решение от @Ivan Bondarenko помогло мне в моей ситуации.

У меня было следующее в моем pom.xml,

<build>
    ...
    <plugins>
         <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <execution>
                        <id>generate-citrus-war</id>
                        <goals>
                            <goal>test-war</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
</build>

То, что я хотел, было отключить выполнение generate-citrus-war для конкретного профиля, и это было решение:

<profile>
    <id>it</id>
    <build>
        <plugins>
            <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <!-- disable generating the war for this profile -->
                    <execution>
                        <id>generate-citrus-war</id>
                        <phase/>
                    </execution>

                    <!-- do something else -->
                    <execution>
                        ...
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
Другие вопросы по тегам