当前位置: 首页 > 知识库问答 >
问题:

如果没有附加自定义目标,maven验证阶段作为生命周期的一部分执行吗?

蓬新
2023-03-14

如果我运行maveninstall命令,那么它将运行之前的所有阶段。validatedefaultmaven构建生命周期的第一个阶段,默认情况下,它不附加到任何maven目标/插件。如果我错了就纠正我

如果它有一个插件/目标附加在它上面,那么这些阶段就可以工作。

由于默认情况下验证阶段没有附加到任何目标上,如果我没有像下面这样特别地钩住任何自定义目标,那么这个阶段会执行吗?

 <build>
    <plugins>
        <plugin>
            <artifactId>maven-clean-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
               <execution>
                   <id>custom-clean</id>
                   <phase>validate</phase>
                   <goals>
                       <goal>clean</goal>
                   </goals>
               </execution>
            </executions>
        </plugin>
</build>

如果它在默认的生命周期中执行(没有定制),那么没有目标的阶段如何工作呢?

共有1个答案

宗涵蓄
2023-03-14

default是三个可用的构建生命周期之一,顾名思义,如果没有指定其他生命周期,则会自动将其纳入构建考虑。这些构建生命周期由序列中不同的构建阶段列表定义,因此构建阶段表示特定生命周期中的一个阶段。

验证是默认生成生命周期的第一个阶段。

如果我们讨论特定于默认生命周期的以下几个主要阶段,它们按照以下顺序执行,以完成默认构建生命周期:验证、编译、测试、打包、验证、安装、部署。实际上,默认构建生命周期总共有21个阶段。

如果我们尝试运行任何特定的阶段,它将从验证阶段开始,并一直执行到指定的阶段,这直接意味着,无论何时考虑构建默认的构建生命周期,它都将从验证阶段开始,而与您指定的是哪个阶段无关。插件目标不同于构建阶段,它代表了一个特定的任务,它有助于项目的构建和管理。

为了构建或完成构建生命周期,插件目标不是强制性的,但如果存在,它可能绑定到底层生命周期的特定构建阶段,也可能不绑定到任何构建阶段。如果一个插件目标没有绑定到任何构建阶段,那么它可以通过直接调用在构建生命周期之外执行,在这种情况下没有执行验证阶段的意义。

此外,在默认情况下,没有插件绑定到验证、初始化和验证阶段,对于其他几个阶段也是如此。

看一看maven生命周期绑定,它显示了默认情况下哪些目标在哪个阶段运行,例如编译阶段目标总是在测试阶段目标之前执行。

如果您指定了一个阶段,那么maven将按顺序运行我们指定的阶段之前的所有阶段,并且对于每个阶段,它将运行附加到该阶段的所有目标。但如果您只指定目标,则它将该目标绑定到给定的默认阶段。但是当您指定执行时,您也可以显式地指定该目标的阶段。

还有一点,如果我们没有为目标指定任何阶段,并且目标没有绑定到任何默认阶段,那么它将只运行该目标,而不运行其他任何阶段。

一个很好的例子是尝试执行jar:jar对于一个jar打包,如果编译阶段还没有执行,这个目标运行将失败,因为maven将无法获得编译好的代码打包为jar。

欲了解更多细节,请参阅此处和此处

默认maven生命周期绑定

您可以关联到另一个场景:当类加载静态成员时,如果没有可用的静态成员,则跳过该阶段并继续。

 类似资料:
  • maven目标和阶段之间的区别/联系是什么? 另一个说: 您不能调用生命周期阶段本身,但可以调用与生命周期阶段绑定的插件的目标。

  • 我试图理解maven目标执行顺序。 所以我有一个pom附加目标到阶段的maven生命周期构建。 当运行我得到的输出如输出部分所示: 现在我的问题是: 1为什么执行的目标,因为我已经附加了哪个目标运行那么我的目标是否被添加到maven的默认目标列表中,或者它可以被覆盖?maven如何决定执行哪个目标? 2在插件部分,我只有和,但没有。那么maven是如何找到正确的插件的呢。。groupId不是必需的

  • 在通过Eclipse构建sprint引导应用程序时得到这个错误。 但如果我通过命令提示进行构建,工作就会很好。附加下面的pom.xml。

  • 这在我做项目的笔记本电脑上工作,而在另一台笔记本电脑上抛出一个错误。错误代码为 格式:或:[:]:.可用的生命周期阶段有:验证、初始化、生成源、过程源、生成资源、过程资源、编译、过程类、生成测试源、过程测试源、生成测试资源、过程测试资源、测试编译、过程测试类、测试、准备包、包、集成前测试、集成测试、集成后测试、验证、安装、部署、预清理、清理、清理后、站点前、站点后、站点部署。->[帮助1][ERR

  • 我可以禁用POM中的特定阶段:Maven生命周期中的禁用阶段。可以从命令行禁用test:是否可以从特定阶段开始mvn生命周期,例如只使用命令行选项编译?

  • 我正在尝试运行一些Selenium测试,但将jetty的启动附加到maven的预集成测试阶段是行不通的。因此,我试图调查这个问题,似乎总体而言,Maven没有在我指定的阶段执行我的目标。 我找到了这个例子并复制了它。我创建了一个插件,当我显式调用它时,它运行良好。但是当我尝试将其附加到验证阶段并运行mvn验证时,我没有看到“你好!!!”输出它只是向我展示了构建成功,而没有调用howdy world