Gradle 插件

插件的作用

把插件应用到你的项目中,插件会扩展项目的功能,帮助你在项目的构建过程中做很多事情。1.可以添加任务到你的项目中,帮你完成一些事情,比如测试、编译、打包。

2.可以添加依赖配置到你的项目中,我们们可以通过它们配置我们项目在构建过程中需要的依赖,比如我们编译的时候依赖的第三方库等。

3.可以向项目中现有的对象类型添加新的扩展属性、方法等,让你可以使用它们帮助我们配置、优化构建,比如 android{} 这个配置块就是 Android Gradle 插件为 Project 对象添加的一个扩展。

4.可以对项目进行一些约定,比如应用 Java 插件之后,约定 sr/main/java 目录下是我们的源代码存放位置,在编译的时候也是编译这个目录下的 Java 源代码文件。

这就是插件,我们只需要按照它约定的方式,使用它提供的任务、方法或者扩展,就可以对我们的项目进行构建。

如何应用一个插件

插件的应用是通过 Project.apply() 方法完成的,apply 方法有好几种用法,并且插件也分为二进制插件和脚本插件。

应用二进制插件

二进制插件就是现实了 org.gradle.api.Plugin 接口的插件,它们可以有 plugin id ,下面看一下如何应用一个 Java 插件:

apply plugin:'java'

'java'Java 插件的 plugin id, 它是唯一的。对于 Gradle 自带的核心插件都有一个容易记的短名,称其为plugin id , 比如这里的 java ,其实它对应的类型是 org.gradle.api.plugins.JavaPlugin ,所以通过该类型我们也可以应用这个插件:

apply plugin: org.gradle.api.plugins.JavaPlugin

又因为包 org.gradle.api.plugins 是默认导入的,所以我们可以去掉包名直接写为:

apply plugin:JavaPlugin

以上三种写法都是等价的,第一种用的最多,第二种一般适用于我们在 build 文件中自定义的插件,也就是脚本插件。

二进制插件一般都是被打包在一个 jar 里独立发布的,比如我们自定义的插件,在发布的时候我们也可以为其指定 plugin id,这个plugin id 最好是一个全限定名称,就像你的包名一样,这样发布的插件 plugin id 就不会重复,比如 org. flysnow tools plugin.XXX

应用脚本插件

build.gradle :

apply from: 'version.gradle'

task test << {
    println " versionName is ${versionName} , versionCode is ${versionCode}"
}

version.gradle:

ext {
    versionName = '1.0.0'
    versionCode = 1
}

上述方式就可以把version.gradle 脚本加载进 build.gradle ,应用脚本插件用的是 from 关键字,后面跟脚本路径,字符串形式。

应用第三方发布的插件

第三方发布的作为 jar 的二进制插件,我们在应用的时候,必须要先在 buildscript{} 里配置其 classpath 才能使用,这个不像 Gradle 为我们提供的内置插件。比如我们的 Android Gradle 插件,就属于 Android 发布的第三方插件,如果要使用它们我们先要进行配置:

buildscript {
    repositories{
        jcenter()
    }
    dependencies {
        classpath 'com. android. tools. build: gradle: 1.5.01'
    }
}

buildscrip{} 是一个在构建项目之前,为项目进行前期准备和初始化相关配置依赖的地
方,配置好所需的依赖,就可以应用插件了。

apply plugin: 'com.android.application'

如果没有提前在 buildscript 里配置依赖的 classpath,会提示找不到这个插件。但是有一种情况例外,如果该插件已经被托管在 htps://plugins. gradle. org/ 网站上,我们就不用在 buildscript 里配置 classpath 依赖了,直接使用 plugins 就可以应用插件。