Maven `pre` и` post` фазы - PullRequest
       2

Maven `pre` и` post` фазы

0 голосов
/ 23 сентября 2018

Всегда ли выполняются фазы pre и post при выполнении соответствующей фазы?Например, если я сделаю mvn clean, это тоже выполнит фазу mvn post-clean?

Я смотрел на https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference,, в котором он сказал:

Ниже перечислены все этапы сборки жизненного цикла по умолчанию, очистки и жизненного цикла сайта, которые выполняются в порядке, заданном до точки указанного.

Строго говоря,, поскольку post-clean следует после clean, он не должен выполняться, если я просто сделаю mvn clean.Но мое внутреннее чувство отличается - хотя я не нашел способа проверить это, поскольку стандартный вывод maven не печатает выполняемую фазу.

Может ли кто-нибудь взвесить ответ и то, как вы его проверили?

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете связать плагин (например, echo-maven-plugin) с фазами жизненного цикла clean, чтобы помочь проверить, выполняется ли каждая фаза или когда она выполняется.

Например,учитывая следующее определение плагина:

<plugin>
    <groupId>com.github.ekryd.echo-maven-plugin</groupId>
    <artifactId>echo-maven-plugin</artifactId>
    <version>1.2.0</version>
    <executions>
        <execution>
            <id>pre-clean</id>
            <phase>pre-clean</phase>
            <goals>
                <goal>echo</goal>
            </goals>
            <configuration>
                <message>In 'pre-clean'</message>
            </configuration>
        </execution>
        <execution>
            <id>clean</id>
            <phase>clean</phase>
            <goals>
                <goal>echo</goal>
            </goals>
            <configuration>
                <message>In 'clean'</message>
            </configuration>
        </execution>
        <execution>
            <id>post-clean</id>
            <phase>post-clean</phase>
            <goals>
                <goal>echo</goal>
            </goals>
            <configuration>
                <message>In 'post-clean'</message>
            </configuration>
        </execution>
    </executions>
</plugin>

Вызов mvn clean приведет к следующему выводу:

$ mvn clean
[INFO] Scanning for projects...
[INFO] 
[INFO] --- echo-maven-plugin:1.2.0:echo (pre-clean) @ sandbox ---
[INFO] In 'pre-clean'
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sandbox ---
[INFO] Deleting target
[INFO] 
[INFO] --- echo-maven-plugin:1.2.0:echo (clean) @ sandbox ---
[INFO] In 'clean'

Таким образом, здесь нет вызова фазы post-clean.

Вызов mvn clean compile приведет к следующему выводу:

$ mvn clean compile
[INFO] Scanning for projects...
[INFO] 
[INFO] --- echo-maven-plugin:1.2.0:echo (pre-clean) @ sandbox ---
[INFO] In 'pre-clean'
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sandbox ---
[INFO] 
[INFO] --- echo-maven-plugin:1.2.0:echo (clean) @ sandbox ---
[INFO] In 'clean'
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ sandbox ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ sandbox ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to ...

Опять же, там нет вызова фазы post-clean.Это подразумевает, что maven-clean-plugin (и, возможно, ничего больше) не привязан к post-clean.

Invoking mvn post-clean приведет к , что вызовет фазу post-clean...

$ mvn post-clean
[INFO] Scanning for projects...
[INFO] 
[INFO] --- echo-maven-plugin:1.2.0:echo (pre-clean) @ sandbox ---
[INFO] In 'pre-clean'
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sandbox ---
[INFO] Deleting target
[INFO] 
[INFO] --- echo-maven-plugin:1.2.0:echo (clean) @ sandbox ---
[INFO] In 'clean'
[INFO] 
[INFO] --- echo-maven-plugin:1.2.0:echo (post-clean) @ sandbox ---
[INFO] In 'post-clean'

Итак, исходя из вышеприведенного теста, я думаю, что следующие утверждения верны:

  • post-clean это не , вызываемое при вызовеclean
  • post-clean - это только , вызываемый при явном вызове post-clean (примечание: непосредственный вызов фаз pre- и post- необычен)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...