我们知道,Maven的核心仅仅定义了抽象的生命周期,具体的任务是交由插件完成的。插件以独立的构件形式存在,因此Maven的核心分发包很小,只有几M大小,Maven会在需要的时候下载并使用插件。
对于插件本身,为了能够复用代码,它往往能够完成多个任务。例如maven-dependency-plugin,它能够基于项目依赖做很多事情。它能够分析项目依赖,帮助找出潜在的无用依赖;它能够列出项目的依赖树,帮助分析依赖来源;它能够列出项目所有已解析的依赖等等。为每个这样的功能编写一个独立的插件显然是不可取的,因为这些任务背后有很多可以复用的代码。因此这些功能聚集在一个插件里,每个功能就是一个插件目标。
maven-dependency-plugin有十多个目标,每个目标对应了一个功能,上述提到的几个功能分别对应的插件目标为dependency:analyze、dependency:tree、dependency:list。这是一种通用的写法,冒号前面是插件前缀,后面是该插件的目标。