zoukankan      html  css  js  c++  java
  • maven学习(五)插件和自定义插件

    插件是可以配置在settings.xml和pom.xml中的

    插件目标

      在了解插件和生命周期的绑定关系之前,先来说一下插件目标。在实际项目构建的过程中,需要经历编译、打包等等许许多多的操作,为每个操作都单独定义一个插件是不可取的,因为有很多可以复用的代码。所以一个插件往往有许多个目标,每个目标完成一个具体的操作。比如denpendency:tree中,dependency指的是插件前缀,tree指的就是插件目标。

    默认绑定:maven生命周期的阶段与插件的目标是相互绑定的,比如maven-compile-plugin插件默认绑定maven defalut生命周期的compile阶段。

    内置绑定(生命周期和插件的绑定关系):

      clean生命周期:

    生命周期阶段 插件目标
    pre-clean  
    clean maven-clean-plugin:clean
    post-clean  

     

     

     

      site生命周期:

    生命周期阶段 插件目标
    pre-site  
    site maven-site-plugin:site
    post-site  
    site-deploy

    maven-site-plugin:deploy

     

     

     

     

     

      default生命周期:

    生命周期阶段 插件目标 执行任务
    process-resources maven-resources-plugin:resources 复制主资源文件至主输出目录
    compile maven-compiler-plugin:compile 编译主代码至输出目录
    process-test-resources maven-resources-plugin:testResources 复制测试资源文件至测试输出目录
    test-compile maven-compiler-plugin:testCompile 编译测试代码至测试输出目录
    test maven-surefire-plugin:test 执行测试用例
    package maven-jar-plugin:jar 创建项目jar包
    install maven-install-plugin:install 将项目输出构件安装到本地仓库
    deploy maven-deploy-plugin:deploy

    将项目输出构件安装到远程仓库

     

     

     

     

     

     

      

     

     

    自定义绑定(配置插件和maven生命周期的目标绑定):直接看例子吧~

    pom.xml配置:

          

    执行:

        

     输出:

         

    源码包:

        

    比对:

        

    插件获取来源:

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

      1.Apache:https://repo.maven.apache.org/maven2/org/apache/maven/plugins/。一般maven-*-plugin的都是maven官网的plugin,引用插件时可以忽略groupId的书写。

      2.codehaus.org

      3.code.google.com

     插件的使用:

      这里再次强调一下在"maven常用命令"中提到过的"mvn help:describe 参数(如-Dplugin=org.apache.maven.plugins:maven-compiler-plugin:2.1)"。当我们遇到某个不了解的插件,但是想要去使用时,可以借助这个命令来查看。这个命令的原理实际是调取了maven-help-plugin这个描述插件

      命令行调取插件格式:mvn [options] [goal(s)] [phase(s)],其中options可以在命令行中使用mvn -h查看和学习,goals指定插件的目标 phase指定在某个特定的生命周期的某个阶段执行。

     插件仓库和解析机制:

      在settings.xml中配置<pluginRepsitories>元素即可。默认也是会从maven的中央仓库来下载(id=central)

      默认的groupId有两个org.apache.maven.plugin、org.codehaus.mojo,对应<pluginGroups>元素(顾名思义,可以配置多个)。

    settings.xml配置:

    <pluginGroups>
        <!-- 官方插件,为了确保稳定不支持快照版 -->
        <pluginGroup>org.apache.maven.plugins</pluginGroup>
        <!-- 另一个插件网站,被墙了进不去 -->
        <pluginGroup>org.codehaus.mojo</pluginGroup>
    <!-- 自己的插件地址 -->
       <pluginGroup>com.your.plugins</pluginGroup> </pluginGroups>

        maven超级pom中默认的插件配置:

     解析机制:

      groupId:settings.xml => <pluginGroups>

      artifactId:pom.xml中某插件的<artifactId>

      1.通过groupId + artifactId定位到元数据关系文件 =>maven-metadata-xxx.xml

          

      2.关系文件中定义了插件的名称、前缀、组件id

      

      3.maven会优先基于默认的groupId归并插件仓库的元数据,并进行查找,找不到就找<pluginGroups>中定义的下一个,都没有就报错。

     自定义插件:(待补充...)

      条件:

        <packaging>元素值必须为:maven-plugin

        <dependency>元素必须依赖maven-plugin-api插件

        必须继承AbatractMojo类并实现execute()

        必须使用@goal注解声明插件的目标

      注解:

        @goal <name>                          唯一必须声明的标注,描述插件的目标名称

        @phase <name>                         执行插件的生命周期

        @requiresDependencyResolution <scope>            运行mojo前必须解析所有指定范围的依赖,compile、test、runtime,默认为runtime

        @requiresProject <true/false>                 是否必须在一个maven项目中运行,默认为true。

        @requireDirectInvocation <true/false>            是否只能使用命令行调用,默认为false

        @requiresOnline <true/false>                  是否必须maven在线,默认false

        @requiresReport <true/false>                 是否要求项目报告已经生成,默认为false  

        @aggregator                           mojo在多模块运行时,是否只在顶层模块运行

        @execute goal = "<goal>"                    运行该目标前,是否先运行另一个mojo目标

        @execute phase = "<phase>"                   运行该目标前,是否先让maven运行一个并行的生命周期,到指定阶段为止

        @execute lifecycle = "<lifecycle>" phase="<phase>"     运行该目标前,让maven先运行一个自定义的生命周期,到指定阶段为止

        @parameter alias = "<aliasName>"               为入参设置别名

        @parameter expression = "${aSystemProperty}"        使用系统参数为入参赋值

        @parameter default-value = "aValue/${anExpression}"     使用固定值或表达式设置一个默认值

        @readonly                             只读参数,无法设置

        @required                             必须参数,没有默认值也不传就会报错

      错误日志:AbstractMojo提供一个getLog()方法,入参支持四种级别的日志方法:debug、info、warn、error。

  • 相关阅读:
    mysql学习笔记-数据库相关操作
    bugku-flag在index里(本地文件包含漏洞+php伪协议的结合应用)
    nmap的指令学习
    雅礼2018-03-11
    两道题,雅礼一题矩阵转置
    2018-03-05 计算鞍点
    多维数组
    TCP拥塞控制
    TCP三次握手和四次挥手
    MySQL事务隔离级别详解
  • 原文地址:https://www.cnblogs.com/douJiangYouTiao888/p/6506635.html
Copyright © 2011-2022 走看看