Gradle 插件代码可以在 build.gradle 中,buildSrc
项目中,以及独立的插件项目中编写。本文将介绍如何在一个独立的项目中使用 Java 语言编写 Gradle 插件,并发布到仓库中。
1 创建项目
Gradle 插件项目和普通的 Java 项目没有什么不同,普通项目是基于其它三方包进行开发,而 Gradle 插件项目基于 Gradle 的 API 进行开发。
基于 Gradle 创建一个 Java 项目,项目目录结构如下,和普通项目一样。
gradle-plugin-sample
|
├───build.gradle
├───settings.gradle
└───src
├───main
│ ├───java
│ └───resources
└───test
├───java
└───resources
引入 Gradle API 相关的 jar 包。为了方便起见,可以通过 gradle 插件 java-gradle-plugin 来引入 Java 插件,引入 Gradle API 相关依赖以及生成插件相关的描述符。
build.gradle
plugins {
id 'java-gradle-plugin'
}
group 'com.robothy'
version '1.0-SNAPSHOT'
repositories {
mavenLocal()
mavenCentral()
}
wrapper{
gradleVersion = '6.7'
}
2 动手开发
项目创建好之后,就可以开始动手开发了。从项目构建角度来看,Gradle 插件是一段可重用的构建逻辑,这段逻辑能够被应用到各个项目当中。更具体来说,Gradle 插件是一个实现了 org.gradle.api.Plugin 接口的类,它被 Project (可以认为是 build.gralde, 它本质是一个实现了 Project 接口的类)所引用。开发插件的本质就是往 build.gradle 中插入一段逻辑。
void apply(T target)
Plugin 是一个泛型接口,有一个抽象方法 apply,它的参数类型可以是 Project, Settings, 或者 Gradle。
类型为 Project,插件可以应用于 build.gradle;
类型为 Settings,插件可应用于 settings.gradle;
类型为 Gradle, 插件可应用于 Gradle 初始化脚本。
在应用插件时,gradle 会创建一个插件类的实例,并调用 apply 方法。因此,插件的逻辑就是 apply 方法中的代码。
一个独立的项目中可以有多个实现了 Plugin 接口的类,意味着一个项目可以包含多个插件。每一个插件都需要在 build.gradle 中添加相应的描述,java-gradle-plugin 会根据这些描述生成插件描述符(jar 包中的一个文件)。
假设要在 gradle-plugin-sample 项目中创建两个插件 hello, goodbye,需要进行如下两个步骤:
1)创建插件类
HelloPlugin.java
import org.gradle.api.Plugin;
import org.gradle.api.Project