# Gradle Plugin
思维导图插件是一系列 Task 的组合。
## 插件可以用来干嘛?
- 模块化构建脚本的功能
- 公共的功能可以抽取出来成为插件,可以供多个 build.gradle 使用,增加复用性。
## 插件的类型
- 脚本插件
是一个构建脚本,只是将构建脚本的一部分抽取到单独的
xxx.gradle
文件中,然后再通过apply from:xxx.gradle
的方式将其引入
- binary插件
binary插件是一个实现
Plugin
接口的类,通过程序化的方式去编写插件的构建逻辑。而binary插件的类可以写在项目的buildSrc
下。
## 插件的使用
为了将构建脚本的逻辑封装到插件中,Gradle 需要做以下两件事:处理插件
,应用插件到目标中
。
- 处理插件
Gradle 会自动找到插件所在的位置,并且将其插件添加到
script calsspath
中,一旦插件被Gradle识别解析,那么就可以在构建脚本中使用这个的插件了。
- 应用插件
一旦插件被应用到执行的构建脚本中,那么插件对应的
Plugin.apply(T target)
就会调用。
## 脚本插件
- 定义脚本插件
定义一个 plugin.gradle
,脚本如下,主要是创建一个名字为 PluginTask 的任务,为依赖 plugin.gradle 的 project 添加了一个 pluginTask 。
project.task("PluginTask") {
doLast {
println "脚本插件..."
}
}
- 依赖脚本插件
在指定的 build.gradle 中依赖 plugin.gradle
。
apply from:插件文件的名称
应用时是相对当前 project 所在的文件相对路径。
apply from: 'plugin.gradle'
- 验证插件是否应用成功
在应用该插件的module中执行 PluginTask
如果能正确执行 doLast
的内容,那么就表示应用成功了。
./gradlew PluginTask
## Binary 插件
将插件定义在 buildSrc 中,这里的 buildSrc 就是当前工程下的一个 module ,Gradle 规定当一个module被命名为 buildSrc 时就会被当成插件去处理。
### 创建一个最简单的插件吧
- 创建一个 Java Library 的 module
-
将 main/src/java 修改为 main/src/groovy
项目结构 - 创建类实现 Plugin 接口并覆写 apply(T garget) 接口
Plugin<T> 是一个泛型接口,在定义插件是应该将这个泛型填为 Project 即可。
class PluginTest implements Plugin<Project> {
@Override
void apply(Project project) {
project.task("MyTask") {
doLast {
println "MyTask doLast invoke..."
}
}
}
}
- 在外部应用这个插件
//在 app 下的 build.gradle 引用这个插件
apply plugin: PluginTest
- 验证效果
app module 引用了这个 PluginTest 插件,因此 app 这个 project 就有 MyTask 这个任务了,我们来执行一下验证一下效果吧。
./gradlew :app:MyTask
### 资源 ID 标识插件
定义好插件后,我们是通过以下方式去引用这个插件的。
//在 app 下的 build.gradle 引用这个插件
apply plugin: PluginTest
看看下面的我们工程引用 Android 插件的方式就跟我们上面的不一样哦。
apply plugin: 'com.android.application'
上面这种方式是给插件定义了一个 Plugin ID
。当需要外界需要引用时就不需要引用插件的类名了,其实就相当于起了个别名吧。
下面来看一下如何来声明插件 ID 的:
- 如下图所示创建文件
buildSrc结构因为插件类的的包名为 com.example.buildsrc ,所以该文件明就是 包名.properties
- 文件内容
文件内容的 implementation-class 对应的值为
插件类的全限名称
。
implementation-class=com.example.buildsrc.PluginTest
- 引用插件
apply plugin:'com.example.buildsrc'
好了,就这样,我们也可以定义插件ID的方式像引用 Android 插件一样来引用我们自己的插件咯。
网友评论