java plug机制_【maven实战】20-插件解析机制
插件仓库:与依赖构件一样,插件构件同样基于坐标存储在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-插件解析机制相关推荐
- 双亲委派机制_面试官:双亲委派机制的原理和作用是什么?
说到双亲委派机制,就必须要先要弄清楚Java的类加载器 什么是类加载器 Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责动态的将Java类加载到Java虚拟机的内 ...
- Java毕业设计项目_企业级实战全栈项目中信CRM
[教程.代码]文章底部 1.学习目标 视频教程目录 [教程.代码]文章底部 2.CRM 系统概念与项目开发流程 2.1. CRM基本概念 圈内存在这么一句话:"世上本来没有CRM,大家的生意 ...
- 实战突击JAVA开发项目_《实战突击Java项目开发案列整合》随书资料(视频+源码)_源雷技术空间...
资源名称:<实战突击Java项目开发案列整合>随书资料(视频+源码) 资源目录: [IT教程网]第1-9_11-15_18_20_21章 [IT教程网]第10章BBS论坛 [IT教程网]第 ...
- java粒子特效_程序员20分钟搞定粒子效果, 仅仅200行代码
原标题:程序员20分钟搞定粒子效果, 仅仅200行代码 这粒子的打造,确实没有布局代码,稍后大家在源码上可以看到,css代码都只有几行,绝大部分代码都是java代码,而且是原生java书写的,现在很多 ...
- java 反射机制_基础篇:深入解析JAVA反射机制
反射的概念 java 的放射机制:在程序运行时,程序有能力获取一个类的所有方法和属性:并且对于任意一个对象,可以调用它的任意方法或者获取其属性 通俗解析:java 文件需要编译成. class 文件才 ...
- java修改联系人_编码实战Web端联系人的增删改查
首先画出分析图 实现效果如图 项目下的包如图: 实体包 package com.contactSystem.entiey; public class Contact { private String ...
- java 反射 配置文件_简单模仿配置文件的反射机制
//Student类 public class Student { public void love() { System.out.println("python"); } } / ...
- java水表识别_【实战】基于OpenCV的水表字符识别(OCR)
1. USB摄像头取图 由于分辨率越高,处理的像素就越多,导致分析图像的时间变长,这里,我们设定摄像头的取图像素为(240,320): cap = cv2.VideoCapture(0) # 根据电脑 ...
- jvm类加载机制_面试:对于JVM类加载机制深度解析
目录: 前文回顾 JVM在什么情况下会加载一个类? 从实用角度出发,来看看验证.准备和初始化的过程 核心阶段:初始化 类加载器和双亲委派机制 1.前文回顾 咱们今天先来回顾一下昨天讲到的JVM整体的一 ...
- python反射机制_详解python之反射机制
一.前言 deff1():print('f1')deff2():print('f2')deff3():print('f3')deff4():print('f4') a= 1 test.py impor ...
最新文章
- 让你工作变得更加有趣
- 11位院士专家建言基础研究
- golang interface传结构体
- Oracle 的两种工作模式Dedicated Server 和 Shared Server
- C++STL理论基础
- 【论文解读】Graph Normalization (GN):为图神经网络学习一个有效的图归一化
- P3197 [HNOI2008]越狱(快速幂)
- 给老师的建议?????
- 【java】初始化一个指定大小的list,在指定位置set存入元素,下标越界
- 构建安全的计算机网络报告,计算机网络与安全实践设计报告 矿大资料.doc
- BaseAnimation
- Vue学习笔记(利用网易云API实现音乐播放器 实例)
- 微信公众平台测试账号申请
- 数字转中文大写= 1234= 一千二百三十四
- Lumen为《堡垒之夜:大逃杀》第四章带来实时全局光照
- 平行哲学与智能技术:平行产业与智慧社会的对偶方程与测试基础
- 《实验细节》MELD文本预处理
- Echarts不显示X轴Y轴网格线
- 360手机:360N4S骁龙版 Twrp、Root、Magisk教程
- 【JS】两个等号和三个等号的区别
热门文章
- snort入侵检测系统下载Linux,入侵检测系统Snort 2.9.0.2 发布
- rm: 无法删除swap: 不允许的操作_safe-rm老板再也不用担心我删库跑路啦[视频]
- linux重定向文件被修改后,Linux服务器修改.htaccess文件实现301重定向
- LTNS的完整形式是什么?
- axure9数据统计插件_WMDA:大数据技术栈的综合实践
- php可以用scanf,C/C++中 使用scanf和printf如何读入输出double型数据。
- 读懂python代码_Python面试|一文让你读懂if __name__==’__main__’的含义
- dnf韩服服务器维护中,DNF2019韩服4.30维护:这些职业被加强
- SpringBoot时间格式化的5种方法!
- Spring Cache 实战:兼容所有缓存中间件!