当我阅读有关 Maven 目标和 Stack Overflow 阶段的信息时,我遇到了两个链接,其中一个说:
执行 maven 时,您可以指定目标或阶段。
另一个说:
您不能调用生命周期阶段本身,但您可以调用绑定到生命周期阶段的插件的目标。
哪一个是对的?还是我不理解?
也可以给我一些简单的例子 Maven 执行生命周期/阶段/目标。而且 Maven 也知道它必须运行阶段或目标?例如,当我说mvn install
,是install
阶段还是目标?
当我阅读有关 Maven 目标和 Stack Overflow 阶段的信息时,我遇到了两个链接,其中一个说:
执行 maven 时,您可以指定目标或阶段。
另一个说:
您不能调用生命周期阶段本身,但您可以调用绑定到生命周期阶段的插件的目标。
哪一个是对的?还是我不理解?
也可以给我一些简单的例子 Maven 执行生命周期/阶段/目标。而且 Maven 也知道它必须运行阶段或目标?例如,当我说mvn install
,是install
阶段还是目标?
邦比亚博,
将 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
这导致西班牙凉菜汤+科布,然后是牛排+肉汁+薯条。
关于将目标绑定到阶段的最后一点。
默认情况下,每个目标都将在某个阶段运行(科布沙拉通常作为开胃菜)。但是你可以覆盖阶段绑定,这就像告诉服务员"I'll have a Cobb salad, but bring it at the same time as the main"
希望这能澄清目标与阶段背后的直觉。
当您调用单个插件时,您需要调用该插件的目标。喜欢
mvn dependency:tree
在这种情况下,您正在调用依赖插件的目标树
另一方面,您可以通过简单地调用 Maven 的一个阶段
mvn test
在这种情况下,您调用的不是插件而是阶段。请注意,插件目标也可以绑定到特定阶段。区别在于您是调用完整阶段(以及隐含的所有先前阶段)还是仅调用单个插件的单个目标
在这里你可以找到默认生命周期的所有阶段(可以修改,但我认为你现在不需要知道),所以你可以看到,install
是一个阶段