假设我已经自定义了一个叫my-maven-plugin的插件如下,插件的goal名为“goaltest”
<groupId>myplugin</groupId>
<artifactId>my-maven-plugin</artifactId>
<version>1.0</version>
如果一个工程想通过mvn groupId:artifactId:version:goal
形式的命令调用my-maven-plugin
只需将my-maven-plugin发布到远程仓库或装载到本地仓库,那么在该工程中,不需要在pom的plugins属性中引入对my-maven-plugin的依赖,即可直接通过mvn myplugin:my-maven-plugin:1.0:goaltest
命令进行调用
如果一个工程想通过mvn goalPrefix:goal
别名形式的命令调用my-maven-plugin
那么有两种方法可以实现
必须通过Maven Plugin Plugin指定my-maven-plugin的别名即goalPrefix(假设指定别名为my),并且在该工程pom的plugins属性中引入对my-maven-plugin的依赖,即可通过
mvn my:goaltest
的形式进行调用在maven的settings.xml文件中的pluginGroups属性中添加my-maven-plugin的groupId,
<pluginGroups>
<pluginGroup>myplugin</pluginGroup>
</pluginGroups>
同时,plugin的artifactId满足***-maven-plugin或maven-***-plugin命名规范(如果满足命名规范,会自动生成别名***,本文中my-maven-plugin已满足命名规范,将会生成的别名为my),或者同样通过Maven Plugin Plugin指定my-maven-plugin的别名即goalPrefix,做到以上两点,便可以在不需要依赖my-maven-plugin的情况下,直接在工程中通过mvn my:goaltest
命令调用my-maven-plugin
原因探究
我们随便找个工程在命令行敲一个完全不存在的plugin进行调用,比如我敲的是mvn xxx:xxx
;会看到如下出错信息
[ERROR] No plugin found for prefix 'xxx' in the current project and in the plugin groups [myplugin, org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/gaozengrong/repository), tbmirror (http://mvnrepo.alibaba-inc.com/mvn/repository), tbmirror-snapshots (http://mvnrepo.alibaba-inc.com/mvn/repository)] -> [Help 1]
可以看到,maven的插件搜索范围包括:
- 当前工程包含的插件
- 默认的org.apache.maven.plugins和org.codehaus.mojo两个group下的插件
- 我们配置的pluginGroup下的插件(本文中即myplugin)
这样再回过头去看要如何设置maven的自定义第三方plugin,就一目了然了。