Maven目标和阶段之间的区别/关系是什么?它们之间有什么关系?


当前回答

选择的答案很好,但我仍然想为这个话题补充一些小的东西。一个例证。

它清楚地展示了不同的阶段如何绑定到不同的插件以及这些插件暴露的目标。

所以,让我们检查一个运行类似mvn compile的例子:

这是一个执行编译器插件的阶段 编译的目标 编译器插件有不同的目标。对于mvn编译,它被映射到一个特定的目标,编译目标。 这与运行mvn编译器:compile相同

因此,阶段是由插件目标组成的。

链接到参考资料

其他回答

选择的答案很好,但我仍然想为这个话题补充一些小的东西。一个例证。

它清楚地展示了不同的阶段如何绑定到不同的插件以及这些插件暴露的目标。

所以,让我们检查一个运行类似mvn compile的例子:

这是一个执行编译器插件的阶段 编译的目标 编译器插件有不同的目标。对于mvn编译,它被映射到一个特定的目标,编译目标。 这与运行mvn编译器:compile相同

因此,阶段是由插件目标组成的。

链接到参考资料

有以下三个内置的构建生命周期:

默认的 清洁 网站

生命周期默认值->[验证、初始化、生成源、流程源、生成资源、流程资源、编译、流程类、生成测试源、流程测试源、生成测试资源、流程测试资源、测试编译、流程测试类、测试、准备包、包、预集成测试、集成测试、后集成测试、验证、安装、部署]

生命周期清洁->[预清洁,清洁,后清洁]

生命周期站点->[站点前,站点,站点后,站点部署]

流是顺序的,例如,对于默认的生命周期,它从验证开始,然后初始化等等…

您可以通过启用mvn的调试模式来检查生命周期,即mvn -X <your_goal>

这些定义在Maven站点的构建生命周期介绍页面中有详细说明,但是我已经尝试总结:

Maven定义了构建过程的4项:

Lifecycle Three built-in lifecycles (aka build lifecycles): default, clean, site. (Lifecycle Reference) Phase Each lifecycle is made up of phases, e.g. for the default lifecycle: compile, test, package, install, etc. Plugin An artifact that provides one or more goals. Based on packaging type (jar, war, etc.) plugins' goals are bound to phases by default. (Built-in Lifecycle Bindings) Goal The task (action) that is executed. A plugin can have one or more goals. One or more goals need to be specified when configuring a plugin in a POM. Additionally, in case a plugin does not have a default phase defined, the specified goal(s) can be bound to a phase.

Maven可以通过以下方式调用:

阶段(如清洁、打包) <plugin-prefix>:<goal>(例如:copy-dependencies) <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>(例如:org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile)

混合的:任意或全部的一个或多个组合,例如:

mvn clean dependency:copy-dependencies package

具有阶段和目标的Maven工作术语。

阶段:Maven阶段是一组与2或3个目标相关的行动

示例:-如果您运行MVN清洁

这是MVN阶段要执行的清洁目标:清洁

目标:与阶段有界限的Maven目标

供参考 http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html

归功于Sandeep Jindal和Premraj。我一时糊涂,他们的解释让我明白了。

我在这里创建了一些完整的代码示例和一些简单的解释https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/。我想这可以帮助别人理解。

简而言之,你不应该试图一次理解所有这三个组,首先你应该理解这三个组之间的关系:

生命周期vs阶段 插件vs目标

1. 生命周期vs阶段

生命周期是按顺序的阶段的集合,请参阅这里的生命周期参考。当你调用一个相位时,它也会调用它之前的所有相位。

例如,清洁生命周期有3个阶段(清洁前、清洁后)。

mvn clean

它会调用pre-clean和clean。

2. 插件vs目标

目标就像Plugin中的一个动作。如果plugin是一个类,goal是一个方法。

你可以这样称呼一个进球:

mvn clean:clean

这意味着“在清洁插件中调用清洁目标”(这里与清洁阶段无关。不要让“干净”这个词混淆了你,它们不是一样的!)

3.现在,阶段和目标之间的关系:

阶段可以(预)链接到目标。例如,通常,清洁阶段与清洁目标相关联。所以,当你调用这个命令时:

mvn clean

它将调用预清洁阶段和清洁阶段,后者与清洁目标相关联。

它几乎等同于:

mvn pre-clean clean:clean

更多细节和完整的例子见https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/