huangxiushuo

道阻且长,行则将至

0%

apply plugin和plugins两种应用gradle插件的区别

如何应用plugin

1

根据官方文档,使用plugin分两步:

  1. 解析(Resolve): 找到包含给定插件的jar的正确版本,并将其添加到脚本类路径中
  2. 应用(apply):即调用plugin,应用插件也分两种
    • 脚本plugin 它的写法是apply from 'other.gradle'
    • 二进制plugin 执行Plugin.apply(T)

other.gradle指文件目录与文件名或Http Url

两种写法

1. apply plugin

这种是我们相对比较熟悉的老的写法,它的解析和应用是分开的。以butterknife为例,一般我们会在Android工程根目录下的build.gradle文件中去引入(解析)这个plugin:

2

然后在子工程的build.gradle文件中去应用它:

3

2. plugins

这种新的写法叫plugins DSL,它的解析和应用是合并的

1
2
3
4
plugins {
id «plugin id»
id «plugin id» version «plugin version» [apply «false»]
}

对于核心plugin,比如com.android.applicationjava,版本号可以省略:

4

而后面的apply加上boolean值用来控制是否要立即应用该插件。比如我只想在工程的某个子工程中应用该插件:

1
2
3
4
5
6
7
8
9
plugins {
id "xyz" version "1.0.0" apply false
}

subprojects { subproject ->
if (subproject.name == "subProject") {
apply plugin: 'xyz'
}
}

这种情况下在子工程apply的版本号可以省略。

不过,重点来了!这种写法的前提是要使用的plugin是核心plugin或者发布在[Gradle plugin repository才可以!也就是说如果你自己写的gradle plugin或者公司的gradle plugin,除非是在插件仓库发布过的,否则只能使用第一种方式。

总结

apply plugin和plugins是使用插件的两种方式,apply plugin是老的写法,使用相对复杂,但是更灵活。 plugins是比较新的写法,它将解析和应用两个步骤合并了,也是官方比较推荐的写法,缺点是只有核心插件和发布在gradle插件仓库的plugin才能用这种写法。