了解插件如何扩展 Gradle 的能力并使用一个流行的插件。

在本节中,你将

  • 应用一个插件

  • 配置该插件

  • 使用该插件

  • 探索其他插件

步骤 0. 开始之前

  1. 你已经在第 1 部分中初始化了 Java 应用程序。

  2. 你已经在第 2 部分中运行了多个任务。

  3. 你已经在第 3 部分中学习了依赖管理。

步骤 1. 理解插件

插件是组织构建逻辑和在项目内重用构建逻辑的主要方法。

插件也用于将自定义任务作为打包代码进行分发。

将插件应用到项目会执行代码,这些代码可以创建任务、配置属性以及以其他方式扩展项目的功能。通常,插件使用 Gradle API 来提供额外功能并扩展 Gradle 的核心特性。

插件可以

  • 向项目添加任务(例如 compile, test)。

  • 扩展基本的 Gradle 模型(例如,添加可配置的新 DSL 元素)。

  • 根据约定配置项目(例如,添加新任务或配置合理的默认值)。

  • 应用特定配置(例如,添加组织仓库或强制执行标准)。

  • 通过扩展为现有类型添加新属性和方法。

步骤 2. 应用插件

我们的项目目前应用了一个插件,即 Gradle 捆绑的应用程序插件

app/build.gradle.kts
plugins {   (1)
    // Apply the application plugin to add support for building a CLI application in Java.
    application
}
app/build.gradle
plugins {   (1)
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
}

让我们在项目中应用一个由 Gradle 维护和分发的插件,称为Maven 发布插件。Maven 发布插件提供了将构建制品发布到 Apache Maven 仓库的能力。它也可以发布到本地 Maven 仓库,这是一个位于你机器上的仓库。

Maven 本地仓库的默认位置可能有所不同,但通常是

  • Mac:/Users/[username]/.m2

  • Linux:/home/[username]/.m2

  • Windows:C:\Users\[username]\.m2

发往 Maven 仓库的发布通常包括

  • 一个或多个制品

  • Gradle 模块元数据

  • Maven POM 文件

通过在 build.gradle(.kts) 的 plugins 代码块中添加 maven-publish 来应用插件

app/build.gradle.kts
plugins {   (1)
    // Apply the application plugin to add support for building a CLI application in Java.
    application
    // Apply the maven publish plugin
    id("maven-publish")
}
app/build.gradle
plugins {   (1)
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
    // Apply the maven publish plugin
    id('maven-publish')
}

如果你正在使用 IntelliJ IDEA,别忘了同步 Gradle。

让我们通过查看可用的新任务来确认插件已经应用。

在你的命令行中运行 ./gradlew :app:tasks

$ ./gradlew :app:tasks

> Task :app:tasks

------------------------------------------------------------
Tasks runnable from project ':app'
------------------------------------------------------------

...

Publishing tasks
----------------
publish - Publishes all publications produced by this project.
publishToMavenLocal - Publishes all Maven publications produced by this project to the local Maven cache.

现在可以使用一组新的发布任务,称为 publishpublishToMavenLocal

同样,Maven 发布插件的新任务现在可以在 IntelliJ 的 Gradle 右侧面板中找到。

intellij idea plugin

步骤 3. 配置插件

将发布信息添加到你的 build.gradle(.kts) 文件中

app/build.gradle.kts
publishing {
    publications {
        create<MavenPublication>("maven") {
            groupId = "com.gradle.tutorial"
            artifactId = "tutorial"
            version = "1.0"

            from(components["java"])
        }
    }
}
app/build.gradle
publishing {
    publications {
        maven(MavenPublication) {
            groupId = 'com.gradle.tutorial'
            artifactId = 'tutorial'
            version = '1.0'

            from components.java
        }
    }
}

再次在命令行中运行 ./gradlew :app:tasks,现在我们为插件提供了关于应用程序的额外信息,你会看到更多任务。

$ ./gradlew :app:tasks

> Task :app:tasks

------------------------------------------------------------
Tasks runnable from project ':app'
------------------------------------------------------------

...

Publishing tasks
----------------
generateMetadataFileForMavenPublication - Generates the Gradle metadata file for publication 'maven'.
generatePomFileForMavenPublication - Generates the Maven POM file for publication 'maven'.
publish - Publishes all publications produced by this project.
publishMavenPublicationToMavenLocal - Publishes Maven publication 'maven' to the local Maven repository.
publishToMavenLocal - Publishes all Maven publications produced by this project to the local Maven cache.
intellij idea pub

步骤 4. 使用插件

要使用该插件,运行 publishToMavenLocal 任务,即执行命令 ./gradlew :app:publishToMavenLocal

$ ./gradlew :app:publishToMavenLocal

> Task :app:compileJava FROM-CACHE
> Task :app:processResources NO-SOURCE
> Task :app:classes UP-TO-DATE
> Task :app:jar
> Task :app:generateMetadataFileForMavenPublication
> Task :app:generatePomFileForMavenPublication
> Task :app:publishMavenPublicationToMavenLocal
> Task :app:publishToMavenLocal

BUILD SUCCESSFUL in 331ms

publishToMavenLocal 任务构建 POM 文件和待发布的制品。然后它将它们安装到本地 Maven 仓库。

你可以在 build 目录中查看 POM 和 GMM 文件

intellij idea dist

你也可以在你的本地 Maven 目录中查看这些文件:~/.m2/repository/com/gradle/tutorial/tutorial/1.0

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.gradle.tutorial</groupId>
  <artifactId>tutorial</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>
</project>

步骤 5. 探索插件

插件通过向你的构建添加任务、配置和行为来扩展 Gradle 的能力。它们是组织和重用构建逻辑的主要方式

Gradle 支持三种主要的插件类型

  1. 核心插件 – 内置于 Gradle(例如,java, application

    plugins {
        id("java")
    }
  2. 社区插件 – 由其他人发布到Gradle 插件门户

    plugins {
        id("com.diffplug.spotless") version "6.25.0"
    }
  3. 自定义插件 – 由你或你的团队创建,用于内部使用。这些插件位于 buildSrc/ 或一个专门的子项目中。

    约定插件是用于在子项目间共享通用构建逻辑(如代码风格、编译器选项或测试设置)的自定义插件。

    plugins {
        id("myproject.java-conventions")
    }

Gradle 建议使用约定插件来避免重复,并在大型构建中管理共享设置。

你可以从约定插件示例中了解更多。

下一步: 探索增量构建 >>