Gradle插件

如何应用一个插件

应用二进制插件

  • 什么是二进制插件

    • 二进制插件就是实现了org.gradle.api.Plugin接口的插件,他们可以有plugin id
    • 二进制插件一般都是被打包在一个jar里独立发布的,比如我们自定义的插件
  • 实例

    • 代码:

        apply from:'version.gradle'
        
        task ex52PrintlnTask << {
          println "App版本是:${versionName},版本号是:${versionCode}"
        }
      
    • version.gradle

        ext {
          versionName = '1.0.0'
          versionCode = 1
        }
      
    • 运行结果:

        > Task :ex52PrintlnTask
        App版本是:1.0.0,版本号是:1

- 分析:
    - 其实这不算一个插件,它只是一个脚本;应用脚本插件,其实就是把这个脚本加载进来,和二进制插件不同的是它使用的是from关键字,后面紧跟是一个脚本文件,可以是本地的也可以是网络的,如果是网络的话要使用HTTPURL
    - 虽然它不是一个真正的插件,但不能忽视它的作用,它是脚本文件模块化的基础,我们可以把庞大的脚本文件,进行分块、分段整理,拆分成一个共用、职责分明的文件
  • apply方法的其他用法

    • apply有三种使用方式

        void apply(Map<String,?> options);
        void apply(Closure closure);
        void apply(Action<? super ObjectConfigurationAction> action);
      
    • 闭包的方式如下:

        apply {
            plugin 'java'
        }
      
    • Action的方式:

        apply(new Action<ObjectConfigurationAction>(){
            @override
            void execute(ObjectConfigurationAction objectConfigurationAction){
                objectConfigurationAction.plugin('java)
            }   
        })
      
  • 应用第三方发布的插件

          buildscript {
              repositories {
                  jcenter()
              }
              dependencies {
                  // gradle插件版本
                  classpath 'com.android.tools.build:gradle:3.0.0'
          
              }
          }
    
    • 分析:
      • buildscript{}块是一个在构建项目之前,为项目进行前期准备和初始化相关配置依赖的地方,配置好所需的依赖,就可以应用插件了:

          apply plugin:'com.android.application'
        
      • 如果没有提前在buildscript里配置依赖的classpath,会提示找不到这个插件

  • 使用plugins DSL应用插件

    • plugins DSL是一种新的插件应用方式,Gradle 2.1以上版本才可以使用。目前这个功能还在内测

         plugins {
            id 'java'
         }
      
    • 这样就应用了java插件,看着更简洁,符合DSL规范

    • 如果该插件已经被托管在https://plugins.gradle.org/网站上,我们就不用再buildscript里配置classpath依赖了,直接使用plugins就可以应用插件:

        plugins {
            id 'org.snoarqube' version '1.2'
        }
      
  • 自定义插件

    • 自定义插件必须要实现Plugin接口,这个接口只有一个apply方法,该方法在插件被应用的时候执行。所以我们可以实现这个方法,做我们想做的事情,比如这里创建一个名称为ex53CustomTask的任务给项目用

    • 实例:

        apply plugin:Ex53CustomPlugin
        class Ex53CustomPlugin implements Plugin<Project>{
            void apply(Project project){
                project.task('ex53CustomTask') << {
                    println "这是一个通过自定义插件方式创建的任务"
                }
            }
        }
      
    • 运行结果:

        3$ gradle ex53
        Starting a Gradle Daemon (subsequent builds will be faster)
        
        > Task :ex53CustomTask
        这是一个通过自定义插件方式创建的任务
      
    • 以上是我们定义的一个简单的插件,是定义在build.gradle脚本里,只能是自己的项目使用

  • 创建一个Groovy工程,然后配置我们插件开发所需的依赖:

    • 实例:

        apply plugin:'Groovy'
        dependencies{
            compile gradleApi()
            compile localGroovy()
        }
        
        //然后实现插件类
        package com.github.rujews.plugins
        import org.gradle.api.Plugin
        import org.gradle.api.Project
        class Ex53CustomPlugin implements Plugin<Project>{
            void apply(Project project){
                project.task('ex53CustomTask') << {
                    println "这是一个通过自定义插件方式创建的任务"
                }
            }
        }
      
    • 每一个插件都有一个唯一的Plugin ID,以供使用者使用,现在我们定义这个plugin id。Gradle

    原文作者:endian
    原文地址: https://www.jianshu.com/p/2fc8358bbe0a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞