Отключить плагин 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 балла, которые я хочу выделить:
- Фаза не установлена, что выглядит менее хакерски, чем "нет", хотя все еще хак.
- 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>