腳本、預編譯腳本或二進位外掛之間的選擇取決於您的特定需求和偏好。

腳本外掛簡單易寫,因為它們直接寫在組建腳本中。它們使用 Kotlin DSL 或 Groovy DSL 編寫。它們適合於小型的一次性任務或快速實驗。但是,隨著組建腳本的規模和複雜性增加,它們可能變得難以維護。

預編譯腳本外掛是編譯成封裝在程式庫中的 Java 類別檔案的 Kotlin DSL 腳本。與腳本外掛相比,它們提供了更好的效能和可維護性,並且可以在不同的專案中重複使用。您也可以使用 Groovy DSL 編寫它們,但不建議這樣做。

二進位外掛是用 Java 或 Kotlin 編寫的完整外掛,編譯成 JAR 檔案,並發佈到儲存庫中。它們提供了最佳的效能、可維護性和可重複使用性。它們適合於需要在專案、組建和團隊之間共享的複雜組建邏輯。您也可以使用 Scala 或 Groovy 編寫它們,但不建議這樣做。

以下是實作 Gradle 外掛的所有選項的細目

# 使用 類型 外掛是 透過套用建立 建議?

1

Kotlin DSL

腳本外掛

.gradle.kts 檔案中,作為抽象類別,實作 Plugin<Project> 介面的 apply(Project project) 方法。

apply(from = "name-of-script")

[1]

2

Groovy DSL

腳本外掛

.gradle 檔案中,作為抽象類別,實作 Plugin<Project> 介面的 apply(Project project) 方法。

apply from: 'name-of-script'

[1]

3

Kotlin DSL

預先編譯的腳本外掛

.gradle.kts 檔案

id("kotlin-dsl")

[2]

4

Groovy DSL

預先編譯的腳本外掛

.gradle 檔案

id("groovy-gradle-plugin")

[3]

5

Kotlin DSL

二進位外掛

.gradle.kts 檔案

id("kotlin-dsl")
id("com.gradle.plugin-publish")

[2]

6

Groovy DSL

二進位外掛

.gradle 檔案

id("groovy-gradle-plugin")
id("com.gradle.plugin-publish")

[2]

7

Java

二進位外掛

抽象類別,實作 Plugin<Project> 介面的 apply(Project project) 方法。

id("java-gradle-plugin")
id("com.gradle.plugin-publish")

[2]

8

Kotlin

二進位外掛

抽象類別,實作 Plugin<Project> 介面的 apply(Project project) 方法。

id("java-gradle-plugin")
id("org.jetbrains.kotlin.jvm")
id("com.gradle.plugin-publish")

[2]

9

Groovy

二進位外掛

抽象類別,實作 Plugin<Project> 介面的 apply(Project project) 方法。

id("java-gradle-plugin")
id("groovy")
id("com.gradle.plugin-publish")

[2]

10

Scala

二進位外掛

抽象類別,實作 Plugin<Project> 介面的 apply(Project project) 方法。

id("java-gradle-plugin")
id("scala")
id("com.gradle.plugin-publish")

[2]

如果您懷疑外掛程式碼有問題,請嘗試建立 建置掃描 以找出瓶頸。 Gradle 分析器 可以協助自動化建置掃描產生,並收集更多低階資訊。


1. 腳本外掛 難以維護、測試,且不支援定義新的可重複使用類型。不建議使用。
2. 建議使用 JavaKotlin 等靜態型別語言來實作外掛,以降低二進位不相容的可能性。如果使用 Groovy,請考慮使用 @groovy.transform.CompileStatic
3. 預先編譯的腳本 外掛最適合用於以 Kotlin DSL 或 Java 編寫的 慣例外掛