原文链接 译者:carvendy
插件前缀解析策略
当你执行maven的时候使用一个标准的生命周期,这些插件参与的生命周期就像是一个相当简单的进程。无论如何,当你从命令行中引用一个指令,例如clean,Maven必须有一些可靠的方式让clean插件前缀为maven-clean-plugin。这提供了简洁的命令行调用,当保存这些描述性的插件的真实工件id。
对于很多复杂性的问题,不是所有插件应该被强制使用同样的组id(在仓库中)。从这些组id在一个项目中假定被控制,和对于Maven多个项目可能使用的插件,它跟随着插件前缀匹配必须容纳多个插件组id。 对于地址关系,Maven提供了一块新的的仓库级别元数据(与任何单一的工件无关)对于插件组来说,在一个插件匹配管理者来组织多个插件组合提供功能性的搜索。
指定的插件前缀
为了给使用者方便的前缀去引用你的插件,一个前缀必须与你的插件相关在构建的时候。在默认的情况下,Maven将令一个猜想的前缀被使用,被移除任何被“maven”或者“plugin”的连字符在这些插件的工件id。方便的工件id格式被定为:
- maven-${prefix}-plugin – 官方Apahe团队的插件(你不必使用这些命名的规则作为你的插件,看看更多的信息)
- ${prefix}-maven-plugin – 其他来源的插件。
如果你的插件工件id符合这个规则,Maven将会根据元数据中正确的前缀自动匹配你插件的组id在仓库中的路径。无论如何,如果你想自定义前缀来引用的你插件,你可以指定前缀来引导通过配置参数在maven-plugin-plugin在你的pom中:
<project>
...
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.3</version>
<configuration>
...
<goalPrefix>somePrefix</goalPrefix>
</configuration>
</plugin>
</plugins>
</build>
</project>
以上的配置讲允许使用者引用你的插件通过前缀somePrefix,作为一个例子:
mvn somePrefix:goal
匹配前缀插件
对于每一个组id配置是为了搜索,Maven将:
- 从每一个远程仓库下载maven-metadata.xml到本地仓库,和命名为maven-metadata-${repoId}.xml 在内部使用 ${groupId}路径。
- 加载元数据文件,在maven-metadata-local.xml(如果存在)中,在内部使用 ${groupId}路径。合并它们。
- 发现插件前缀在合并元数据。如果它匹配,它应该引用一个具体的组和工件对。否则,继续在用户插件组中找下一个组id。 这些元数据文件组成的组(为了清晰当这些文件被大块在容器之外的目录),和一个组的插件节点。
在列表中每个插件包含一个前缀节点表示插件的命令行前缀,和一个工件节点, 提供的前缀映射对方提供了足够的信息来查找和使用插入部件。当一个插件被安装和发布,适当的元数据文件被放置和如果前缀匹配丢失了,修改前缀匹配。
配置Maven查找插件
默认情况下,maven将搜索组id org.apache.maven.plugins 为了前缀工件匹配插件,它需要在构建过程中执行。无论如何,前面提到的,使用者可能需要一个第三方的插件。从Maven项目被假定有控制的默认插件组,这意味着配置maven来搜索其他组的位置为了插件前缀匹配。
这很简单。在Maven配置文件(当前用户:${user.home}/.m2/settings.xml; 全局:${maven.home}/conf/settings.xml),你可以提供一个自定义的插件组项目,列出你想要搜索的插件(每个都在自己的plugingroup GroupID的子元素)。作为例子,如果我的项目使用了一个 模板文件,我可以设置:
<pluginGroups>
<pluginGroup>org.codehaus.modello</pluginGroup>
</pluginGroups>
这使我能够执行以下,这将从模式生成java类:
mvn -Dversion=4.0.0 -Dmodel=maven.mdo modello:java
Maven会搜索以下GroupID的搜索后,在用户设置中指定的任何插件组:
- org.apache.maven.plugins
- org.codehaus.mojo
注意:当指定被使用的插件组在搜索的前缀匹配中,秩序是关键!被指定的一个插件组 com.myco.plugins有一个前缀clean,我可以覆盖maven-clean-plugin的时候,当clean:clean被调用的时候。 笔记2:想了解更多信息可以查看 settings.xml
资源
maven配置指南