Отключить плагины 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>