如何调用maven的自定义第三方插件(非别名形式&别名形式)

假设我已经自定义了一个叫my-maven-plugin的插件如下,插件的goal名为“goaltest”

myplugin
my-maven-plugin
1.0

如果一个工程想通过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

那么有两种方法可以实现

  1. 必须通过Maven Plugin Plugin指定my-maven-plugin的别名即goalPrefix(假设指定别名为my),并且在该工程pom的plugins属性中引入对my-maven-plugin的依赖,即可通过mvn my:goaltest的形式进行调用

  2. 在maven的settings.xml文件中的pluginGroups属性中添加my-maven-plugin的groupId,

  
       myplugin  

同时,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,就一目了然了。

你可能感兴趣的:(如何调用maven的自定义第三方插件(非别名形式&别名形式))