Отключить плагины maven при использовании определенного профиля
Я ищу, чтобы найти способ отключения выполнения плагина, если он работает с определенным профилем.
Это противоположность запуску плагина, если выбран профиль.
Мой прецедент: у моей сборки maven есть целая загрузка плагинов, но при запуске на моей машине dev я хочу пропустить некоторые из них. Вместо того, чтобы комментировать эти плагины локально, я хочу иметь возможность просто запустить сборку с профилем "dev". Плагины будут продолжать работать на моей постоянной сборке.
Идеи?
Ответы
Ответ 1
Существует четкий способ отключить выполнение плагина, когда активен определенный профиль.
Во-первых, вам нужно добавить идентификатор для выполнения плагина, например:
<build>
<plugins>
<!-- (...) -->
<plugin>
<groupId>nl.geodienstencentrum.maven</groupId>
<artifactId>sass-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>styles-compilation</id> <!-- plugin execution identifier -->
<phase>generate-resources</phase>
<goals>
<goal>update-stylesheets</goal>
</goals>
</execution>
</executions>
</plugin>
Затем вам нужно определить профиль, в котором этот плагин НЕ будет выполнен:
<profiles>
<profile>
<id>no-sass</id>
<build>
<plugins>
<plugin>
<groupId>nl.geodienstencentrum.maven</groupId>
<artifactId>sass-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>styles-compilation</id> <!-- here there must be the same identifier as defined in <build><plugins> section -->
<phase>none</phase> <!-- this disables plugin -->
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Теперь, если вы запустите стандартную сборку maven:
mvn clean package
плагин sass-maven будет выполнен, но при запуске:
mvn clean package -P no-sass
плагин sass-maven не будет выполнен.
Ответ 2
- Определите свой pom, так что у вас есть только плагины, которые вам нужны в режиме dev
- Определение профиля dev
- Определите профиль производства, который содержит все необходимые вам плагины
- Определите профиль производства по умолчанию
пример pom:
<profiles>
<profile>
<id>production</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<!--
<plugin>
...
</plugin>
-->
</plugins>
</build>
</profile>
<profile>
<id>dev</id>
<!-- Some other logic here, if necessary.
Otherwise, there no need for another profile. -->
</profile>
</profiles>
Для запуска в режиме Dev вы можете вызвать следующее:
mvn -Pdev compile
Для запуска в режиме производства просто используйте обычные шаги:
mvn compile
Если вы не хотите/не должны определять что-либо особенное в своем профиле dev, вы можете опустить его декларацию и вызвать свой режим Dev таким образом (!
Отключает профиль):
mvn -P!production compile
Имейте в виду: вам может понадобиться избежать восклицательного знака, поскольку это особый символ в bash:
mvn -P\!production compile
Ответ 3
Основываясь на ответе Krzysiek, вам не нужно определять явные казни, просто посмотрите на выход maven, и вы можете отключить выполнение по умолчанию.
Например, учитывая следующий вывод из maven:
[INFO] --- maven-resources-plugin:2.7:copy-resources (prepare-dockerfile) @ tilbud ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
...
[INFO]
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ tilbud ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
....
[INFO]
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ tilbud ---
...
[INFO]
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ tilbud ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
...
[INFO]
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ tilbud ---
....
Сгенерированные имена выполнения по умолчанию перечислены в скобках после плагина и цели. Следующий профиль отключает следующие плагины:
<profiles>
<profile>
<id>packageOnly</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>default-test</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>default-resources</id>
<phase>none</phase>
</execution>
<execution>
<id>default-testResources</id>
<phase>none</phase>
</execution>
<execution>
<id>prepare-dockerfile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>