5月27日 23:18
Gradle 插件有哪些类型?如何创建和使用自定义插件?
核心回答
Gradle 插件分两类:脚本插件和二进制插件。创建自定义插件有三种方式:在 build script 中直接编写、在 buildSrc 模块中组织、以及创建独立项目发布。
插件类型
脚本插件是额外的 .gradle 文件,通过 apply from 引入:
groovyapply from: 'gradle/checkstyle.gradle'
只能在本项目复用,不推荐用于复杂逻辑。
二进制插件实现了 Plugin<Project> 接口,打包为 JAR 后可跨项目共享:
groovyplugins { id 'java' // 核心插件,无需版本 id 'org.springframework.boot' version '3.0.0' // 社区插件,需指定版本 }
推荐使用 plugins DSL 而非旧式 apply plugin:。
创建自定义插件的三种方式
1. Build Script 内联
直接在 build.gradle 中编写,适合一次性逻辑:
groovyclass 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' } } }
插件实现类:
groovypackage 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):
propertiesimplementation-class=com.example.CustomPlugin
使用方引入:
groovyplugins { id 'com.example.custom-plugin' } customConfig { name = 'MyApp' }
追问
- plugins DSL 与 apply 有什么区别? plugins DSL 在配置阶段解析,支持类型安全和版本管理;apply 在脚本执行时才应用,无法提前校验。
- 自定义插件如何测试? 使用 Gradle TestKit 编写功能测试,在临时项目中运行构建验证行为。
- 为什么推荐用 Java/Kotlin 而非 Groovy 实现插件? 静态类型减少二进制不兼容风险,Kotlin DSL 还能获得 IDE 补全支持。