title: Gradle(六)插件date: 2021-06-21 22:28:54.677

updated: 2021-06-22 00:03:18.379
url: /?p=253
categories: Gradle
tags: gradle

插件

插件类型

Gradle 中有两种插件类型:脚本插件二进制插件

  1. 脚本插件是一个额外的构建脚本,它提供了一种声明性方法来操作构建,通常在构建中使用。
  2. 二进制插件是实现插件接口并采用编程方法来操作构建的类,二进制插件可以驻留在插件 JAR 中的一个构建脚本和项目层次结构或外部。

使用插件

Project.apply()API方法用于应用特定的插件,可以多次使用相同的插件。

脚本插件

脚本插件可以使用本地文件应用,也可以远程文件应用。

1.
本地文件应用

新建两个文件,分别是 other.gradlebuild.gradle ,并且它们在同一目录下。

新建 other.gradle 文件

1
2
3
4
ext{
version = '1.0.0'
url = 'www.lautung.com'
}

build.gradle 文件应用 other.gradle 脚本。

1
2
3
4
5
6
7
apply from: 'other.gradle'

task runTask{
doLast {
println "version:$project.ext.version,version:$project.ext.url"
}
}

运行任务

1
2
3
22:49:49: Executing task 'runTask'...
> Task :runTask
version:1.0.0,version:www.lautung.com

2.
远程文件应用

将上面 other.gradle 文件放在远程文件系统中,然后 apply from 后接文件路径即可。

二进制插件(对象插件)

二进制插件是实现了 org.gradle.api.Plugin 接口的插件。它们可以有 Plugin id。

编写自定义插件

创建 HelloPlugin 插件,注意 HelloPlugin 必须实现 Plugin 接口。

1
2
3
4
5
6
7
8
9
10
11
12
apply plugin: HelloPlugin

class HelloPlugin implements Plugin<Project> {

void apply(Project project){
project.task('hello'){
doLast {
println "Hello from the HelloPlugin!"
}
}
}
}
1
2
$ gradle -q hello
Hello from the HelloPlugin!

自定义插件扩展

大多数插件需要从构建脚本中的配置获得支持, Gradle 项目有一个关联ExtensionContainer对象,它有助于跟踪传递给插件的所有设置和属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

apply plugin: HelloPlugin

class HelloPlugin implements Plugin<Project> {

void apply(Project project){
project.extensions.create("mymessage",HelloPluginExtension)

project.task('hello'){
doLast {
println "Hello from the HelloPlugin! $project.mymessage.message1,$project.mymessage.message2,$project.mymessage.message3"
}
}
}
}

class HelloPluginExtension{
String message1
String message2
String message3
}


//使用方法1
mymessage.message1 = '你好啊1'
//使用方法2
mymessage {
message2 = '你好啊2'
message3 = '你好啊3'
}
1
2
$ gradle -q hello
Hello from the HelloPlugin! 你好啊1,你好啊2,你好啊3

Gradle Java插件

Java 插件是构建 JVM 项目的基础,它为项目增加了诸多功能,比如编译、测试、打包、发布等等。很多插件都是基于 Java 插件实现的,比如 Android 插件。

1.
Java 插件使用

1
2
3
4
5
6
7
//plugins{
// id('java')
//}

plugins{
id 'java'
}

2.
Source sets 源集

……