脚本、预编译脚本或二进制插件之间的选择取决于您的具体需求和偏好。

脚本插件 简单易写。它们使用 Kotlin DSL 或 Groovy DSL 编写。它们适用于小型、一次性任务或快速实验。但是,随着构建脚本的大小和复杂性增加,它们可能变得难以维护。

预编译脚本插件 是编译成 Java 类文件并打包在库中的 Kotlin 或 Groovy DSL 脚本。与脚本插件相比,它们提供更好的性能和可维护性,并且可以在不同的项目中重复使用。您也可以使用 Groovy DSL 编写它们,但不建议这样做。

二进制插件 是使用 Java、Groovy 或 Kotlin 编写的成熟插件,它们被编译成 JAR 文件并发布到仓库。它们提供最佳的性能、可维护性和可重用性。它们适用于需要在项目、构建和团队之间共享的复杂构建逻辑。您也可以使用 Scala 或 Groovy 编写它们,但不建议这样做。

这是实现 Gradle 插件的所有选项的细分。

# 使用 类型 插件是 推荐吗?

1

Kotlin DSL

脚本插件

.gradle.kts 文件中,作为一个抽象类,实现 Plugin<Project> 接口的 apply(Project project) 方法。

[1]

2

Groovy DSL

脚本插件

.gradle 文件中,作为一个抽象类,实现 Plugin<Project> 接口的 apply(Project project) 方法。

[1]

3

Kotlin DSL

预编译脚本插件

.gradle.kts 文件。

4

Groovy DSL

预编译脚本插件

.gradle 文件。

尚可[2]

5

Java

二进制插件

在 Java 中,作为一个抽象类,实现 Plugin<Project> 接口的 apply(Project project) 方法。

6

Kotlin / Kotlin DSL

二进制插件

在 Kotlin 和/或 Kotlin DSL 中,作为一个抽象类,实现 Plugin<Project> 接口的 apply(Project project) 方法。

7

Groovy / Groovy DSL

二进制插件

在 Groovy 和/或 Groovy DSL 中,作为一个抽象类,实现 Plugin<Project> 接口的 apply(Project project) 方法。

尚可[2]

8

Scala

二进制插件

在 Scala 中,作为一个抽象类,实现 Plugin<Project> 接口的 apply(Project project) 方法。

[2]

如果您怀疑插件代码有问题,请尝试创建一个 Build Scan 以识别瓶颈。Gradle profiler 可以帮助自动化 Build Scan 的生成并收集更多底层信息。


1. 脚本插件 难以维护。不要使用脚本插件 apply from:,不建议这样做。
2. 建议使用静态类型语言(如 JavaKotlin)来实现插件,以降低二进制不兼容的可能性。如果使用 Groovy,请考虑使用 静态编译的 Groovy