Gradle 构建于一个灵活的插件系统之上。

开箱即用,Gradle 提供核心基础架构,如依赖解析、任务编排和增量构建。大多数功能——如编译 Java、构建 Android 应用或发布构件——都来自插件

gradle basic 6

插件是一个可重用的软件,它为 Gradle 构建系统提供了额外的功能。它可以

  • 为你的构建添加新任务(如 compileJavatest

  • 添加新配置(如 implementationruntimeOnly

  • 贡献 DSL 元素(如 application {}publishing {}

插件使用 plugins 块(Kotlin DSL 或 Groovy DSL)应用于构建脚本,它们带来了特定领域或工作流所需的所有逻辑。

常用插件

以下是一些流行的插件及其功能

Java 库插件java-library

编译 Java 源代码,生成 Javadoc,并将类打包成 JAR。添加了 compileJavajavadocjar 等任务。

Google 服务插件com.google.gms.google-services

在 Android 构建中配置 Firebase 和 Google API。添加了 googleServices {} 等 DSL 和 generateReleaseAssets 等任务。

Gradle Bintray 插件com.jfrog.bintray

使用 bintray {} 配置块将构件发布到 Bintray(或其他 Maven 风格的仓库)。

应用插件

应用插件到项目允许插件扩展项目的能力。

你在构建脚本中使用插件 ID(一个全局唯一的标识符/名称)和版本来应用插件

plugins {
    id("«plugin id»").version("«plugin version»")
}

例如:

plugins {
    id("java-library")
    id("com.diffplug.spotless").version("6.25.0")
}

这告诉 Gradle

  • 应用内置的 java-library 插件,该插件添加了编译 Java、运行测试和打包库的任务。

  • 应用社区维护的 spotless 插件(版本 6.25.0),该插件添加了代码格式化任务,并集成了 ktlintprettiergoogle-java-format 等工具。

插件类型

Gradle 支持三种类型的插件

  1. 脚本插件 – 可重用的 .gradle.gradle.kts 文件,使用 apply from: 应用。

  2. 预编译插件 – 打包的 Kotlin 或 Groovy 代码,使用 plugins {} 块应用。

  3. 二进制插件 – 打包并发布的插件(通常来自插件门户或 Maven),使用 plugins {} 块应用。

大多数现代构建更喜欢二进制预编译插件。

插件分发

Gradle 插件来自不同的来源,你可以根据你的用例选择正确的类型。

1. 核心插件(内置于 Gradle)

Gradle 核心插件是 Gradle 分发包本身包含的一组插件。这些插件为构建和管理项目提供了基本功能。

核心插件的独特之处在于它们提供短名称,例如核心 JavaLibraryPluginjava-library。你可以通过 ID 应用它们,无需额外设置

plugins {
    id("java-library")
}

这些插件由 Gradle 团队维护。请参阅核心插件参考以获取完整列表。

2. 社区插件(来自插件门户)

社区插件是由 Gradle 社区开发而不是 Gradle 核心分发包的一部分的插件。这些插件提供了可能特定于某些用例或技术的额外功能。

Gradle 的插件生态系统包含数千个由社区共享的开源插件。这些插件发布到 Gradle 插件门户,可以通过 ID 和版本应用

plugins {
    id("org.springframework.boot").version("3.1.5")
}

当构建运行时,Gradle 将自动下载插件。

3. 本地或自定义插件(在你的构建中定义)

你也可以编写自己的插件——无论是用于单个项目还是在同一构建中的多个项目之间共享。

最常见的自定义插件类型是约定插件,它存在于 buildSrc/ 目录或独立的 build-logic 模块中。这些插件用 Kotlin 或 Groovy 编写,并遵循与已发布插件相同的结构。

约定插件使用 plugins {} 块应用,就像外部插件一样

plugins {
    id("my.custom-conventions")
}

要了解如何创建自己的插件,请参阅插件开发章节