1.插件类型
Gradle的插件分为两种类型:脚本插件(script plugins)和二进制插件(binary plugins)。
脚本插件就是额外的构建脚本,脚本插件通常用来对构建过程进行深度配置,同样遵循声明式的思想。脚本插件常常作为另一个脚本文件(即*.gradle) 文件被放置在项目目录中,以本地文件的形式应用插件。
二进制插件就是实现了Plugin接口的类,可以用java、kotlin和groovy编写,更容易进行测试,还可以被打包成jar包共享出去。
2.Gradle插件的三种实现方式
1.脚本插件
直接在build.gradle中编写一个实现了org.gradle.api.plugins接口的类, 这个类就是一个插件。
2.在buildSrc中编写插件类
Gradle提供了一种在现有项目中编写二进制插件的方法,在项目根目录下创建 buildSrc 文件,并遵循相关规范。
Gradle会自动编译这些目录下的插件,并且将它们解析,使得在项目的所有构建脚本中都可以应用这些目录下的插件。
3.独立项目
单独建立一个项目,打包成一个jar包,实现复用。
3.自定义插件
网上能找到的示例都是基于Gradle6.0之前版本的,本文中使用的是官方文档的最新示例。
项目结构:
Project:
----app
--------build.gradle
----library
--------build.gradle
----plugin
--------src/main/java/
--------build.gradle
----build.gradle
----settings.gradle
1.在项目根目录创建一个新目录,在新目录下创建代码目录及build.gradle文件。
plugins {
id 'java-gradle-plugin' //Gradle开发插件
id 'kotlin' //使用Kotlin
id 'maven-publish' //插件发布
}
dependencies {
implementation "com.android.tools.build:gradle:4.2.1" //使用com.android.build.api
}
gradlePlugin {
plugins {
MethodTracer {
id = 'com.example.plugin' //定义插件id
implementationClass = 'com.example.plugin.CustomPlugin' //定义插件实现类
}
}
}
publishing {
// 定义发布什么
publications {
plugin(MavenPublication) {
groupId = 'com.example' //这三部分组成了:com.example:plugin:1.0.0-SNAPSHOT
artifactId = 'plugin'
version = '1.0.0-SNAPSHOT'
from components.java //使用默认的配置生成jar包
}
}
// 定义发布到哪
// publishPluginPublicationToRepoRepository 发布到 plugin/build/repo
// publishPluginPublicationToMavenLocal 发布到 ~/.m2/repository
repositories {
maven {
name = 'repo'
url = layout.buildDirectory.dir("repo")
}
}
}
2.在项目根目录的settings.gradle中添加:include ':plugin'
3.在项目根目录的build.gradle中添加本地依赖:
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath 'com.example:plugin:1.0.0-SNAPSHOT'
}
}
4.在app目录的build.gradle使用插件:apply plugin: 'com.example.plugin'
5.发布插件:./gradlew publishToMavenLocal
参考文档: