如果在命令行运行mvn-h来显示mvn命令帮助,就可以看到如下的信息:
该信息告诉了我们mvn命令的基本用法,options表示可用的选项,mvn命令有20多个选项,这里暂不详述,读者可以根据说明来了解每个选项的作用。除了选项之外,mvn命令后面可以添加一个或者多个goal和phase,它们分别是指插件目标和生命周期阶段。第7.2.5节已经详细介绍了如何通过该参数控制Maven的生命周期。现在我们关心的是另外一个参数:goal。
我们知道,可以通过mvn命令激活生命周期阶段,从而执行那些绑定在生命周期阶段上的插件目标。但Maven还支持直接从命令行调用插件目标。Maven支持这种方式是因为有些任务不适合绑定在生命周期上,例如maven-help-plugin:describe,我们不需要在构建项目的时候去描述插件信息,又如maven-dependency-plugin:tree,我们也不需要在构建项目的时候去显示依赖树。因此这些插件目标应该通过如下方式使用:
不过,这里还有一个疑问,describe是maven-help-plugin的目标没错,但冒号前面的help是什么呢?它既不是groupId,也不是artifactId,Maven是如何根据该信息找到对应版本插件的呢?同理,为什么不是maven-dependency-plugin:tree,而是dependency:tree?
解答该疑问之前,可以先尝试一下如下的命令:
这两条命令就比较容易理解了,插件的groupId、artifactId、version以及goal都得以清晰描述。它们的效果与之前的两条命令基本是一样的,但显然前面的命令更简洁,更容易记忆和使用。为了达到该目的,Maven引入了目标前缀的概念,help是maven-help-plugin的目标前缀,dependency是maven-dependency-plugin的前缀,有了插件前缀,Maven就能找到对应的artifactId。不过,除了artifactId,Maven还需要得到groupId和version才能精确定位到某个插件。下一节将详细解释这个过程。