首页 » Maven实战 » Maven实战全文在线阅读

《Maven实战》7.8.4 解析插件前缀

关灯直达底部

前面讲到mvn命令行支持使用插件前缀来简化插件的调用,现在解释Maven如何根据插件前缀解析得到插件的坐标。

插件前缀与groupId:artifactId是一一对应的,这种匹配关系存储在仓库元数据中。与之前提到的groupId/artifactId/maven-metadata.xml不同,这里的仓库元数据为groupId/maven-metadata.xml,那么这里的groupId是什么呢?第7.6.1节提到主要的插件都位于http://repo1.maven.org/maven2/org/apache/maven/plugins/和http://repository.codehaus.org/org/codehaus/mojo/,相应地,Maven在解析插件仓库元数据的时候,会默认使用org.apache.maven.plugins和org.codehaus.mojo两个groupId。也可以通过配置settings.xml让Maven检查其他groupId上的插件仓库元数据:

基于该配置,Maven就不仅仅会检查org/apache/maven/plugins/maven-metadata.xml和org/codehaus/mojo/maven-metadata.xml,还会检查com/your/plugins/maven-metadata.xml。

下面看一下插件仓库元数据的内容,见代码清单7-10。

代码清单7-10 插件仓库元数据

上述内容是从中央仓库的org.apache.maven.plugins groupId下插件仓库元数据中截取的一些片段,从这段数据中就能看到maven-clean-plugin的前缀为clean,maven-compiler-plugin的前缀为compiler,maven-dependency-plugin的前缀为dependency。

当Maven解析到dependency:tree这样的命令后,它首先基于默认的groupId归并所有插件仓库的元数据org/apache/maven/plugins/maven-metadata.xml;其次检查归并后的元数据,找到对应的artifactId为maven-dependency-plugin;然后结合当前元数据的groupId org.apache.maven.plugins;最后使用第7.8.3节描述的方法解析得到version,这时就得到了完整的插件坐标。如果org/apache/maven/plugins/maven-metadata.xml没有记录该插件前缀,则接着检查其他groupId下的元数据,如org/codehaus/mojo/maven-metadata.xml,以及用户自定义的插件组。如果所有元数据中都不包含该前缀,则报错。