当我阅读有关Maven目标,Stack Overflow的各个阶段时,我遇到了两个链接,其中一个说:
执行maven时,您可以指定目标或阶段。
- What is the difference/relation between maven goals and phases?
而另一个说:
您无法调用生命周期阶段,但您可以调用绑定到生命周期阶段的插件目标。
哪一个是对的?或者我不理解它?
也可以给我一些简单的例子Maven执行生命周期/阶段/目标。
还有Maven知道它必须运行阶段或目标吗?例如。当我说mvn install
时,它是install
阶段还是目标?
答案 0 :(得分:7)
Bombya Bo,
将Maven构建生命周期视为具有连续阶段的花式餐:
目标是在该阶段服务的实际食物。
在这个比喻中:
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}}是一个阶段