2

当我阅读有关 Maven 目标和 Stack Overflow 阶段的信息时,我遇到了两个链接,其中一个说:

执行 maven 时,您可以指定目标或阶段。

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

另一个说:

您不能调用生命周期阶段本身,但您可以调用绑定到生命周期阶段的插件的目标。

执行特定的 Maven 阶段

哪一个是对的?还是我不理解?

也可以给我一些简单的例子 Maven 执行生命周期/阶段/目标。而且 Maven 也知道它必须运行阶段或目标?例如,当我说mvn install,是install阶段还是目标?

4

2 回答 2

8

邦比亚博,

将 Maven 构建生命周期想象为具有连续阶段的美食:

  • 启动器(资源)
  • 主要(编译)
  • 甜点(包)
  • 咖啡(安装)
  • 摘要(部署)

目标是在该阶段提供的实际食物。

  • 开胃菜:西班牙凉菜汤
  • 主菜:牛排;肉汁;薯条
  • 甜点:提拉米苏
  • 咖啡:卡布奇诺

在这个类比中:

  • pom.xml 文件相当于写在黑板上的今天的特价商品
  • 在命令行上调用mvn相当于向服务员下订单
  • 您可以将多个食物/目标绑定到一个阶段(牛排+肉汁+薯条)

如果你喜欢房子的默认设置,那么你可以告诉他带上前 N 道菜:

"I'll take the 2 course meal"
$ mvn compile

你会得到一切,包括主菜(即西班牙凉菜汤,然后是牛排+肉汁+薯条)。

调用单个目标相当于自定义您的订单:

"I'll take a Cobb salad plus the 2 course meal"
$ mvn javadoc:javadoc compile

如果您希望该目标永久添加到菜单中,请将其添加到 pom 文件中。这让我们回到了电话:

$ mvn compile

这导致西班牙凉菜汤+科布,然后是牛排+肉汁+薯条。

关于将目标绑定到阶段的最后一点。

默认情况下,每个目标都将在某个阶段运行(科布沙拉通常作为开胃菜)。但是你可以覆盖阶段绑定,这就像告诉服务员"I'll have a Cobb salad, but bring it at the same time as the main"

希望这能澄清目标与阶段背后的直觉。

于 2014-10-30T06:54:18.700 回答
1

当您调用单个插件时,您需要调用该插件的目标。喜欢

mvn dependency:tree

在这种情况下,您正在调用依赖插件的目标树

另一方面,您可以通过简单地调用 Maven 的一个阶段

mvn test

在这种情况下,您调用的不是插件而是阶段。请注意,插件目标也可以绑定到特定阶段。区别在于您是调用完整阶段(以及隐含的所有先前阶段)还是仅调用单个插件的单个目标

在这里你可以找到默认生命周期的所有阶段(可以修改,但我认为你现在不需要知道),所以你可以看到,install是一个阶段

于 2014-10-29T15:28:32.557 回答