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

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

gradle basic 6

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

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

  • 添加新配置(例如 implementationruntimeOnly

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

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

常用插件

以下是一些常用插件及其功能:

Java Library Plugin (java-library)

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

Google Services Plugin (com.google.gms.google-services)

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

Gradle Bintray Plugin (com.jfrog.bintray)

使用 bintray {} 配置块将 artifact 发布到 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. 本地或自定义插件(在您的构建中定义)

您也可以编写自己的插件 — 可以在单个项目中使用,或在同一构建中的多个项目之间共享。

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

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

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

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