您的位置:首页 > 其它

【maven实战】20-插件解析机制

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

不同于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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: