Maven插件

Maven的插件

    咱们知道mvn 只是抽象了项目构建的生命周期,生命周期自己是不作任何工做的,具体的工做都是由插件来完成。每一个个插件都有一个或多个目标(goal),咱们一般执行的mvn命令就是去调用mvn的插件,html

如:mvn dependency:list , dependency 是插件前缀,list是插件的目标,denpendency插件还有其余的目标好比说:tree,analyze等。apache

插件绑定

    咱们在执行mvn clean ,mvn install ,mvn compile的时候为何不像上面介绍的那样使用 mvn plugin:goal这种方式呢? 应为maven 为各个生命周期的主要阶段都绑定了默认的插件,因此咱们执行这些命令的时候是调用了默认的插件和目标。何为插件绑定?把一个生命周期的某个阶段和具体插件的某个目标关联起来,这就是插件绑定。bash

 为了减小用户的配置,作到开箱即用,maven为咱们内置了一些默认的插件绑定:maven

clean:ui

default:url

site:spa

自定义插件的绑定

用户能够根据须要将某个插件的指定目标绑定到生命周期的某个阶段上。插件

方法:命令行

<build>
  <plugins>
    <plugin>
       <groupId>XXXX</groupId>
       <artifactId>XXXX</artifactId>
       <version>XXX</version>
       <excutions>
         <excution>
           <id>attach-source</id>
           <phase>verify</phase>
           <goals>
             <goal>jar-no-fork</goal>
           </goals>
         </excution>
       </excutions>
    <plugin>
  </plugins>
</build>

注意:code

  • 关于插件的version,用户应该声明一个非快照版本
  • 可使用maven-help-plugin插件查看插件信息,mvn help:describe -Dplugin=xxxx
  • 若是不指定插件绑定的phase,maven会自动根据插件默认的绑定阶段去执行相应动做

插件配置 

  • 命令行插件配置
mvn install -Dmaven.test.skip=true

     经过-D加入参数,实现插件配置

  • pom中插件全局配置
<build>
  <plugins>
    <plugin>
       <groupId>XXXX</groupId>
       <artifactId>XXXX</artifactId>
       <version>XXX</version>
       <configuration>
         <source>1.5</source>
         <target>1.5</target>
       </configuration>
    <plugin>
  </plugins>
</build>
  • pom插件中任务配置

      为插件任务配置特定的参数,以下例:

<build>
  <plugins>
    <plugin>
       <groupId>XXXX</groupId>
       <artifactId>XXXX</artifactId>
       <version>XXX</version>
       <excutions>
         <excution>
           <id>attach-source</id>
           <phase>verify</phase>
           <goals>
             <goal>jar-no-fork</goal>
           </goals>
           <configuration>
              <tasks>
                 <echo> validate phase </echo>
              </tasks>
           </configuration>
         </excution>
       </excutions>
    <plugin>
  </plugins>
</build>

获取插件信息

  • 在线获取插件信息       

        基本上maven全部的插件都来自apache和codehaus:

        http://maven.apache.org/plugins/index.html

        http://www.mojohaus.org/plugins.html

  • 使用maven-help-plugin

      下面的例子是描述maven-compile-plugin插件:

mvn help:describe -Dplugin=compiler

       上面命令里使用到了目标前缀(goal prefix),help 是maven-help-plugin的目标前缀,compiler是maven-compile-plugin的目标前缀。使用目标前缀能够简化咱们使用插件的方式,不用使用maven的坐标来调用插件。若是不使用前缀,上面的命令将变成:

mvn org.apache.maven.plugins:maven-help-plugin:2.1:describe -Dplugin=org.apache.maven.plugins:maven-compile-plugin:2.1

       若只想查看关于插件目标的描述,能够在maven命令后加上-Dgoal=xxx,输出更详细的信息能够加上-Ddetail

插件解析机制

   咱们在命令行调用mvn 插件时,插件的名字是什么,gorupid,artifactid,version分别是什么,插件从哪里得到的?

  • 插件仓库

        maven有单独的插件仓库,配置方式与普通构建的远程仓库不一样,以下:

<pluginRepositories>
                <pluginRepository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>repo</name>
                    <url>http://maven:8081/artifactory/repo</url>
                </pluginRepository>
                <pluginRepository>
                    <snapshots>
						<updatePolicy>always</updatePolicy>
				    </snapshots>
                    <id>snapshots</id>
                    <name>repo</name>
                    <url>http://maven:8081/artifactory/repo</url>
                </pluginRepository>
            </pluginRepositories>

id、name 、url等的含义与普通仓库一致,通常来讲中央仓库的所包含的插件已经可以知足咱们平常所需了,因此通常配置一个中央仓库的地址就能够,可是有点须要注意 插件的snapshot 通常都配置为 false,使用稳定版的插件。

  • 插件默认的groupid

​​​​​​​在配置pom的时候若是是官方的插件,就能够省略goupid(org.apache.maven.plugins)。可是不推荐使用这种方式,省略的代码很少,可是会对不熟悉maven的同事形成费解。

  • 解析插件的版本

        ​​​​​​​maven在超级pom中为核心插件设置了版本,超级pom 是全部pom的父pom,因此即便咱们不配置核心插件的版本,这些核心插件仍然能经过父pom的配置找到版本。

         若是没有指定版本,且使用的插件也不是核心插件,那么maven就会遍历远程仓库的元数据(groupid/)和本地仓库的元数据合并,得出latest和release,maven3中若没有指定版本号,则默认解析为release。保证插件的稳定。依赖maven解析插件版本是不可取的,即时解析的是非快照版,可是也不能保证新版本的逻辑不会改变,因此建议是显示的指定maven插件的版本。

  •  解析插件前缀

​​​​​​​        maven插件前缀与groupid和artifactid 一一对应,这种匹配关系保存在 groupid/maven-metadata.xml中,若是不作任何配置,maven会默认使用org.apache.maven.plugins 和 org.codehaus.mojo这两个groupid解析仓库元数据。固然也能够在settings.xml中配置:

        这样maven出了会从上述两个默认的goupid里去解析元数据以外,也会从配置的这个com.your.plugins下元数据的内容。

            maven 解析插件的过成以下:

  1. 根据groupid 找到对应的maven-metadata.xml,
  2. 根据mavan-metadata.xml里插件前缀和artfactid对应关系找到对应的artifactid
  3. 根据版本解析的过程肯定版本
相关文章
相关标签/搜索