当Maven执行阶段或目标或生命周期?

时间:2014-10-29 15:22:42

标签: maven phase

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

  

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

     

- What is the difference/relation between maven goals and phases?

而另一个说:

  

您无法调用生命周期阶段,但您可以调用绑定到生命周期阶段的插件目标。

     

- Executing a specific Maven phase

哪一个是对的?或者我不理解它?

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

2 个答案:

答案 0 :(得分:7)

Bombya Bo,

将Maven构建生命周期视为具有连续阶段的花式餐:

  • starter(资源)
  • main(编译)
  • 甜点(包)
  • 咖啡(安装)
  • digestif(deploy)

目标是在该阶段服务的实际食物。

  • starter:gazpacho
  • 主要:牛排;肉汁;薯条
  • 甜点:提拉米苏
  • 咖啡:卡布奇诺

在这个比喻中:

  • 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

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

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

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

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

答案 1 :(得分:1)

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

mvn dependency:tree

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

另一方面,您只需执行

即可调用maven阶段
mvn test

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

Here你可以找到默认生命周期的所有阶段(可以修改,但我认为你现在还不需要知道),正如你所看到的,{{3}} 1}}是一个阶段