当我执行关联的阶段时,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 标准输出不打印它正在执行的阶段。
任何人都可以权衡答案以及您如何验证?
您可以将插件(例如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>
Run Code Online (Sandbox Code Playgroud)
调用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'
Run Code Online (Sandbox Code Playgroud)
所以,那里没有调用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 ...
Run Code Online (Sandbox Code Playgroud)
同样,那里没有调用post-clean阶段。这意味着 maven-clean-plugin(也许没有别的)没有绑定到post-clean.
调用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'
Run Code Online (Sandbox Code Playgroud)
因此,基于上述测试,我认为以下陈述是正确的:
post-clean是不是当你调用调用cleanpost-clean是只叫你时,明确调用post-clean(注:调用pre-和post-阶段直接异常)| 归档时间: |
|
| 查看次数: |
1681 次 |
| 最近记录: |