5月27日 23:18

Gradle 插件有哪些类型?如何创建和使用自定义插件?

核心回答

Gradle 插件分两类:脚本插件二进制插件。创建自定义插件有三种方式:在 build script 中直接编写、在 buildSrc 模块中组织、以及创建独立项目发布。

插件类型

脚本插件是额外的 .gradle 文件,通过 apply from 引入:

groovy
apply from: 'gradle/checkstyle.gradle'

只能在本项目复用,不推荐用于复杂逻辑。

二进制插件实现了 Plugin<Project> 接口,打包为 JAR 后可跨项目共享:

groovy
plugins { id 'java' // 核心插件,无需版本 id 'org.springframework.boot' version '3.0.0' // 社区插件,需指定版本 }

推荐使用 plugins DSL 而非旧式 apply plugin:

创建自定义插件的三种方式

1. Build Script 内联

直接在 build.gradle 中编写,适合一次性逻辑:

groovy
class GreetingPlugin implements Plugin<Project> { void apply(Project project) { project.tasks.register('greet') { doLast { println 'Hello from plugin' } } } } apply plugin: GreetingPlugin

无法在其他项目复用。

2. buildSrc 模块

在项目根目录创建 buildSrc/src/main/groovy/ 目录,插件类放于此。整个项目可见,可编写测试,但不能跨项目共享。

3. 独立项目(推荐)

创建独立的 Gradle 插件项目,发布到 Maven 仓库供任意项目使用:

groovy
// 插件项目 build.gradle plugins { id 'java-gradle-plugin' id 'maven-publish' } gradlePlugin { plugins { customPlugin { id = 'com.example.custom-plugin' implementationClass = 'com.example.CustomPlugin' } } }

插件实现类:

groovy
package com.example class CustomPlugin implements Plugin<Project> { void apply(Project project) { def ext = project.extensions.create('customConfig', CustomExtension) project.tasks.register('customTask') { group = 'Custom' doLast { println "Config: ${ext.name}" } } } } class CustomExtension { String name = 'default' }

注册插件 ID(META-INF/gradle-plugins/com.example.custom-plugin.properties):

properties
implementation-class=com.example.CustomPlugin

使用方引入:

groovy
plugins { id 'com.example.custom-plugin' } customConfig { name = 'MyApp' }

追问

  • plugins DSL 与 apply 有什么区别? plugins DSL 在配置阶段解析,支持类型安全和版本管理;apply 在脚本执行时才应用,无法提前校验。
  • 自定义插件如何测试? 使用 Gradle TestKit 编写功能测试,在临时项目中运行构建验证行为。
  • 为什么推荐用 Java/Kotlin 而非 Groovy 实现插件? 静态类型减少二进制不兼容风险,Kotlin DSL 还能获得 IDE 补全支持。
标签:Gradle