不管是自己编写的plugin插件,还是springboot等开源机构提供的插件,都属于自定义的第三方plugin。
这两天学习springboot的时候,关于maven有一些疑问。
一个工程,如果pom中未指定plugin包含spring-boot-maven-plugin,那么使用mvn spring-boot:repackage
等命令进行打包的时候,不会去下载spring-boot-maven-plugin.jar文件,会提示找不到plugin即如下错误:
[ERROR] No plugin found for prefix 'spring-boot' in the current project and in the plugin groups [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)
如果一个工程的pom中指定plugin包含spring-boot-maven-plugin,这时使用相应的命令时,会去远程maven仓库下载spring-boot-maven-plugin.jar(如果本地仓库中没有的话)。
我们知道,调用自定义的plugin时一般是通过mvn groupId:artifactId:version:goal
这种固定格式来进行调用,例如我们调用spring-boot-maven-plugin的某个goal,命令为
mvn org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:start
,如果我们要通过别名来进行调用,比如mvn idea:clean
命令,那么我们就必须在maven的settings.xml文件中的pluginGroups标签下加入我们自定义的plugin的groupId
<pluginGroups>
<pluginGroup>org.springframework.boot</pluginGroup>
</pluginGroups>
但是实际情况下,我们没有在settings.xml文件中加入spring-boot-maven-plugin的groupId,那么我们是如何通过别名来运行mvn spring-boot:repackage
等命令的呢?
我们从仓库下载并解压spring-boot-maven-plugin-1.5.2.RELEASE.jar文件,找到它的pom文件(本质上spring-boot-maven-plugin也是一个maven工程),发现pom中指定了属性<goalPrefix>spring-boot</goalPrefix>
,既然指定了前缀,那么肯定可以通过mvn spring-boot
来进行调用了。