【maven实战】20-插件解析机制
2018-02-04 19:29
351 查看
插件仓库:与依赖构件一样,插件构件同样基于坐标存储在maven仓库中,在需要的时候maven会从本地仓库中查找插件,如果不存在则从远程仓库查找。找到插件后在下载到本地仓库使用。值得一提的是maven会区别对待依赖的远程仓库与插件的远程仓库。当maven需要的依赖在本地仓库不存在时,他会去所配置的远程仓库查找,可是当maven需要的插件在本地仓库不存在时他就不会去这些远程仓库查找。
不同于repositories及其repository子元素,插件的远程仓库使用pluginRepositories和pluginRepository配置。例如maven内置了如下的插件远程仓库配置,如下:
插件的默认groupId:在POM中配置插件的时候,如果该插件是maven的官方插件(groupId=org.apache.maven.plugins)就可以省略groupId配置,如下:
解析插件前缀:上一节讲到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上的插件仓库元数据,如下:
<settings>
<pluginGroups>
<pluginGroup>com.your.plugins</pluginGroup>
</pluginGroups>
</settings>基于该配置maven就不会仅仅检查org/apache/maven/plugins/maven-metadata.xml和org/codehaus/mojo/maven-metadata.xml,还会检查com/your/plugins/maven-metadata.xml。
下面看一下插件仓库元数据的内容,如下:
<metadata>
<plugins>
<plugin>
<name>Apache Maven Clean Plugin</name>
<prefix>clean</prefix>
<artifactId>maven-clean-plugin</artifactId>
</plugin>
<plugin>
<name>Apache Maven Compiler Plugin</name>
<prefix>compiler</prefix>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<name>Apache Maven Dependency Plugin</name>
<prefix>dependency</prefix>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
</plugins>
</metadata>上述内容是从中央仓库的org.apache.maven.plugins.groupId下插件仓库元数据中截取的一些片段,从这段数据中就能看到maven-clean-plugin的前缀为clean,maven-compiler-plugin的前缀为compiler,maven-dependency-plugin的前缀为dependency。
不同于repositories及其repository子元素,插件的远程仓库使用pluginRepositories和pluginRepository配置。例如maven内置了如下的插件远程仓库配置,如下:
<pluginRepositories> <pluginRepository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> </pluginRepositories>这个默认插件仓库的地址就是中央仓库,他关闭了对SNAPSHOT的支持,以防止引入SNAPSHOT版本的插件而导致不稳定的构建。一般来说中央仓库所包含的插件完全能够满足我们的需要,因此也不需要配置其他的插件仓库。只有在很少的情况下,项目使用的插件无法在中央仓库找到,或者自己编写了插件,这个时候可以参考上述配置,在POM或者settings.xml中加入其他的插件仓库配置。
插件的默认groupId:在POM中配置插件的时候,如果该插件是maven的官方插件(groupId=org.apache.maven.plugins)就可以省略groupId配置,如下:
<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>1.5</source> <target>1.5</source> </configuration> </plugin> </plugins> </build>解析插件版本:同样是为了简化插件的配置和使用,在用户没有提供插件版本的情况下,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上的插件仓库元数据,如下:
<settings>
<pluginGroups>
<pluginGroup>com.your.plugins</pluginGroup>
</pluginGroups>
</settings>基于该配置maven就不会仅仅检查org/apache/maven/plugins/maven-metadata.xml和org/codehaus/mojo/maven-metadata.xml,还会检查com/your/plugins/maven-metadata.xml。
下面看一下插件仓库元数据的内容,如下:
<metadata>
<plugins>
<plugin>
<name>Apache Maven Clean Plugin</name>
<prefix>clean</prefix>
<artifactId>maven-clean-plugin</artifactId>
</plugin>
<plugin>
<name>Apache Maven Compiler Plugin</name>
<prefix>compiler</prefix>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<name>Apache Maven Dependency Plugin</name>
<prefix>dependency</prefix>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
</plugins>
</metadata>上述内容是从中央仓库的org.apache.maven.plugins.groupId下插件仓库元数据中截取的一些片段,从这段数据中就能看到maven-clean-plugin的前缀为clean,maven-compiler-plugin的前缀为compiler,maven-dependency-plugin的前缀为dependency。
相关文章推荐
- 【maven实战】12-从仓库解析依赖的机制
- maven3实战之仓库(从仓库解析依赖的机制)
- maven插件解析机制
- Maven之——插件目标及绑定、命令行调用插件、目标前缀(插件前缀解析策略)、插件解析运行机制
- (十三)Maven插件解析运行机制
- maven插件解析机制
- Maven 教程(13)— Maven插件解析运行机制
- 【maven实战】46-编写Maven插件
- 【maven实战】16-插件目标与插件绑定
- Maven实战学习笔记、7.生命周期和插件
- jQuery插件的机制及实战
- Maven仓库(从仓库解析依赖的机制)
- Maven之——插件配置与解析
- jquery插件基础解析—jquery插件实战教程(2)
- H5 和移动端 WebView 缓存机制解析与实战
- 商城项目实战03:使用maven tomcat插件启动聚合工程
- Maven实战(八)常用Maven插件介绍(下)
- Mavenx学习笔记二十二:Maven仓库(从仓库解析依赖的机制)
- 一起学Maven(Maven中的生命周期与插件机制)<七>
- Maven让资源文件处理插件能够解析资源文件中的Maven属性