插件仓库:与依赖构件一样,插件构件同样基于坐标存储在maven仓库中,在需要的时候maven会从本地仓库中查找插件,如果不存在则从远程仓库查找。找到插件后在下载到本地仓库使用。值得一提的是maven会区别对待依赖的远程仓库与插件的远程仓库。当maven需要的依赖在本地仓库不存在时,他会去所配置的远程仓库查找,可是当maven需要的插件在本地仓库不存在时他就不会去这些远程仓库查找。

不同于repositories及其repository子元素,插件的远程仓库使用pluginRepositories和pluginRepository配置。例如maven内置了如下的插件远程仓库配置,如下:

central

Central Repository

https://repo.maven.apache.org/maven2

default

false

never

这个默认插件仓库的地址就是中央仓库,他关闭了对SNAPSHOT的支持,以防止引入SNAPSHOT版本的插件而导致不稳定的构建。一般来说中央仓库所包含的插件完全能够满足我们的需要,因此也不需要配置其他的插件仓库。只有在很少的情况下,项目使用的插件无法在中央仓库找到,或者自己编写了插件,这个时候可以参考上述配置,在POM或者settings.xml中加入其他的插件仓库配置。

插件的默认groupId:在POM中配置插件的时候,如果该插件是maven的官方插件(groupId=org.apache.maven.plugins)就可以省略groupId配置,如下:

maven-compiler-plugin

2.1

1.5

1.5

maven-compiler-plugin

2.1

1.5

1.5

解析插件版本:同样是为了简化插件的配置和使用,在用户没有提供插件版本的情况下,maven会自动解析插件版本。首先maven在超级POM中为所有核心插件设定了版本,超级POM是所有maven项目的父POM,所有项目都继承这个超级POM的配置,因此即使用户不加任何配置,maven使用核心插件的时候他们的版本就已经确定了。这些插件包括maven-clean-plugin,maven-compiler-plugin,maven-surefire-plugin等。

解析插件前缀:上一节讲到mvn命令行支持使用插件前缀来简化插件的使用,现在解释maven如何根据插件前缀解析得到插件的坐标。插件前缀与groupId:artifactId是一一对应的,这种匹配关系存储在仓库元数据中。这里的仓库元数据为groupId/maven-metadata.xml,那么这里的groupId是什么呢?主要的插件都位于https://repo.maven.apache.org/maven2/org/apache/maven/plugins/和https://repository.codehaus.org/org/codehaus/mojo/,相应地maven在解析插件仓库元数据的时候,会默认使用apache.maven.plugins和org.codehaus.mojo两个groupId。也可以通过配置settings.xml让maven检查其他groupId上的插件仓库元数据,如下:

com.your.plugins

com.your.plugins

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

下面看一下插件仓库元数据的内容,如下:

Apache Maven Clean Plugin

clean

maven-clean-plugin

Apache Maven Compiler Plugin

compiler

maven-compiler-plugin

Apache Maven Dependency Plugin

dependency

maven-dependency-plugin

Apache Maven Clean Plugin

clean

maven-clean-plugin

Apache Maven Compiler Plugin

compiler

maven-compiler-plugin

Apache Maven Dependency Plugin

dependency

maven-dependency-plugin

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

java plug机制_【maven实战】20-插件解析机制相关推荐

  1. 双亲委派机制_面试官:双亲委派机制的原理和作用是什么?

    说到双亲委派机制,就必须要先要弄清楚Java的类加载器 什么是类加载器 Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责动态的将Java类加载到Java虚拟机的内 ...

  2. Java毕业设计项目_企业级实战全栈项目中信CRM

    [教程.代码]文章底部 1.学习目标 视频教程目录 [教程.代码]文章底部 2.CRM 系统概念与项目开发流程 2.1. CRM基本概念 圈内存在这么一句话:"世上本来没有CRM,大家的生意 ...

  3. 实战突击JAVA开发项目_《实战突击Java项目开发案列整合》随书资料(视频+源码)_源雷技术空间...

    资源名称:<实战突击Java项目开发案列整合>随书资料(视频+源码) 资源目录: [IT教程网]第1-9_11-15_18_20_21章 [IT教程网]第10章BBS论坛 [IT教程网]第 ...

  4. java粒子特效_程序员20分钟搞定粒子效果, 仅仅200行代码

    原标题:程序员20分钟搞定粒子效果, 仅仅200行代码 这粒子的打造,确实没有布局代码,稍后大家在源码上可以看到,css代码都只有几行,绝大部分代码都是java代码,而且是原生java书写的,现在很多 ...

  5. java 反射机制_基础篇:深入解析JAVA反射机制

    反射的概念 java 的放射机制:在程序运行时,程序有能力获取一个类的所有方法和属性:并且对于任意一个对象,可以调用它的任意方法或者获取其属性 通俗解析:java 文件需要编译成. class 文件才 ...

  6. java修改联系人_编码实战Web端联系人的增删改查

    首先画出分析图 实现效果如图 项目下的包如图: 实体包 package com.contactSystem.entiey; public class Contact { private String ...

  7. java 反射 配置文件_简单模仿配置文件的反射机制

    //Student类 public class Student { public void love() { System.out.println("python"); } } / ...

  8. java水表识别_【实战】基于OpenCV的水表字符识别(OCR)

    1. USB摄像头取图 由于分辨率越高,处理的像素就越多,导致分析图像的时间变长,这里,我们设定摄像头的取图像素为(240,320): cap = cv2.VideoCapture(0) # 根据电脑 ...

  9. jvm类加载机制_面试:对于JVM类加载机制深度解析

    目录: 前文回顾 JVM在什么情况下会加载一个类? 从实用角度出发,来看看验证.准备和初始化的过程 核心阶段:初始化 类加载器和双亲委派机制 1.前文回顾 咱们今天先来回顾一下昨天讲到的JVM整体的一 ...

  10. python反射机制_详解python之反射机制

    一.前言 deff1():print('f1')deff2():print('f2')deff3():print('f3')deff4():print('f4') a= 1 test.py impor ...

最新文章

  1. 让你工作变得更加有趣
  2. 11位院士专家建言基础研究
  3. golang interface传结构体
  4. Oracle 的两种工作模式Dedicated Server 和 Shared Server
  5. C++STL理论基础
  6. 【论文解读】Graph Normalization (GN):为图神经网络学习一个有效的图归一化
  7. P3197 [HNOI2008]越狱(快速幂)
  8. 给老师的建议?????
  9. 【java】初始化一个指定大小的list,在指定位置set存入元素,下标越界
  10. 构建安全的计算机网络报告,计算机网络与安全实践设计报告 矿大资料.doc
  11. BaseAnimation
  12. Vue学习笔记(利用网易云API实现音乐播放器 实例)
  13. 微信公众平台测试账号申请
  14. 数字转中文大写= 1234= 一千二百三十四
  15. Lumen为《堡垒之夜:大逃杀》第四章带来实时全局光照
  16. 平行哲学与智能技术:平行产业与智慧社会的对偶方程与测试基础
  17. 《实验细节》MELD文本预处理
  18. Echarts不显示X轴Y轴网格线
  19. 360手机:360N4S骁龙版 Twrp、Root、Magisk教程
  20. 【JS】两个等号和三个等号的区别

热门文章

  1. snort入侵检测系统下载Linux,入侵检测系统Snort 2.9.0.2 发布
  2. rm: 无法删除swap: 不允许的操作_safe-rm老板再也不用担心我删库跑路啦[视频]
  3. linux重定向文件被修改后,Linux服务器修改.htaccess文件实现301重定向
  4. LTNS的完整形式是什么?
  5. axure9数据统计插件_WMDA:大数据技术栈的综合实践
  6. php可以用scanf,C/C++中 使用scanf和printf如何读入输出double型数据。
  7. 读懂python代码_Python面试|一文让你读懂if __name__==’__main__’的含义
  8. dnf韩服服务器维护中,DNF2019韩服4.30维护:这些职业被加强
  9. SpringBoot时间格式化的5种方法!
  10. Spring Cache 实战:兼容所有缓存中间件!