以下詞彙表可協助您理解 Gradle 術語。

A

成品

建置產生的檔案或目錄,例如 JAR、ZIP 發行版本或原生可執行檔。

成品通常設計為供使用者和其他專案使用或取用,或部署到託管系統。在這種情況下,成品是單一檔案。在專案間相依性的情況下,目錄很常見,以避免產生可發布成品的成本。

B

建置

建置是 Gradle 執行的原子工作片段的總和。它由專案組成,而這些專案又有一系列任務

建置通常具有成功或失敗的結果。

您可以使用 gradlegradlew 命令執行建置。

建置掃描

建置掃描是 Gradle 提供的一項服務,用於識別建置問題和建置效能。

建置腳本

build.gradle 腳本。

建置腳本的存在,以及設定腳本中的項目(根建置腳本除外,它不需要任何項目),是定義 Gradle 模組的原因。

C

功能

功能識別由一個或多個組件提供的特性。功能由類似於模組版本所用座標的座標識別。預設情況下,每個模組版本都提供與其座標相符的功能,例如 com.google:guava:18.0。功能可用於表示組件提供多個功能變體,或兩個不同的組件實作相同的功能(因此不能一起使用)。如需更多詳細資訊,請參閱關於功能的章節。

組件

模組的任何單一版本。

對於外部函式庫,術語組件指的是一個已發布的函式庫版本。

在建置中,組件由外掛程式(例如,Java 函式庫外掛程式)定義,並提供一種簡單的方式來定義發布以進行發布。它們包含成品以及描述組件變體詳細資訊的適當中繼資料。例如,預設設定中的 java 組件由 JAR(由 jar 任務產生)和 Java apiruntime 變體的相依性資訊組成。它也可能定義其他變體,例如,sourcesJavadoc,以及相應的成品。

組件中繼資料規則

組件中繼資料規則是在從儲存庫擷取組件的中繼資料後修改組件中繼資料的規則,例如,新增遺失的資訊或更正不正確的資訊。與解析規則相反,組件中繼資料規則在解析開始之前套用。組件中繼資料規則定義為建置邏輯的一部分,並且可以透過外掛程式共用。如需更多資訊,請參閱關於使用組件中繼資料規則修正中繼資料的章節。

配置

配置是為特定目標分組在一起的相依性的具名集合。配置提供對基礎、已解析模組及其成品的存取權。如需更多資訊,請參閱關於相依性配置以及可解析和可取用配置的章節。

「配置」一詞是一個多載術語,在相依性管理之外具有不同的含義。
配置階段

Gradle 建置由兩個主要階段組成,配置階段(不要與[sub:terminology_configuration] 實例混淆)和執行階段

配置階段首先發生,並且是單執行緒的。

慣例外掛程式

建置在生態系統外掛程式之上的[sub:terminology_plugin],它將常見的慣例套用至使用該外掛程式的建置腳本。

跨配置

請參閱跨專案配置

跨專案配置

跨專案配置是指在多專案建置中管理和自訂多個子專案。

它允許您在共用的 build.gradle(.kts)settings.gradle.(kts) 檔案中定義常見設定、相依性和任務,通常位於根專案中

build.gradle
subprojects {
    apply plugin: 'java'
    repositories {
        mavenCentral()
    }
    dependencies {
        testImplementation 'junit:junit:4.13.2'
    }
}

跨專案配置通常會破壞專案隔離和並行專案執行,因此您應盡可能使用慣例外掛程式或適當的 API

build.gradle
gradle.lifecycle.beforeProject {
    repositories {
        mavenCentral()
    }
}

始終避免以下跨專案配置範例

subprojectA/build.gradle
tasks.register("customTask") {
    // Avoid this! Directly accessing outputs from another subproject's task
    def outputFile = project(":subprojectB").tasks.named("someTask").get().outputs.files.singleFile
    inputs.file(outputFile)
    doLast {
        println("Processing file from subprojectB: ${outputFile}")
    }
}
subprojectB/build.gradle
tasks.register("someTask") {
    def outputFile = layout.buildDirectory.file("output.txt")
    outputs.file(outputFile)
    doLast {
        outputFile.get().asFile.text = "Output from subprojectB"
        println("Generated output file in subprojectB: ${outputFile.get().asFile}")
    }
}

這會將 subprojectAsubprojectB 緊密耦合,從而破壞模組化,並在並行建置或配置快取期間產生潛在問題。

D

相依性

相依性是指向建置、測試或執行模組所需的另一段軟體的指標。如需更多資訊,請參閱關於宣告相依性的章節。

相依性約束

相依性約束定義了模組要成為相依性的有效解析結果所需滿足的需求。例如,相依性約束可以縮小支援的模組版本集合。相依性約束可用於表示傳遞相依性的此類需求。如需更多資訊,請參閱關於升級和降級傳遞相依性的章節。

E

生態系統外掛程式

[sub:terminology_plugin] 負責建置語言,例如 Java(javajava-library)、Groovy、Scala、Android、Kotlin 等。許多外掛程式由 Gradle 維護,並且是 Gradle 發行版本的一部分。

執行階段

Gradle 建置的第二個主要階段,執行階段在配置階段完成後發生。這是執行所有任務動作的地方。

此階段具有多個並行層級。

F

功能變體

功能變體是表示組件功能的變體,可以單獨選擇或不選擇。功能變體由一個或多個功能識別。如需更多資訊,請參閱關於模型化功能變體和選用相依性的章節。

G

Gradle 建置

Gradle 建置可以由一個或多個 Gradle 專案組成,並且通常使用根目錄中的 settings.gradle(.kts) 檔案進行配置。

叫用時,Gradle 建置會根據定義的建置邏輯執行一組任務,通常使用 Gradle Wrapper (./gradlew)。

H

I

增量建置

增量建置僅執行必要的任務。如果我們執行任何原始程式碼,Gradle 會先檢查該原始程式碼是否已執行過。如果程式碼有一些變更,則會執行該程式碼,但如果沒有變更,則會略過該程式碼的執行。

Init 腳本

init 或初始化腳本由 Gradle 類型的實例支援。

J

K

L

M

MavenCentral

MavenCentral 是託管 Maven 發布版本的主要儲存庫。它由一家名為 Sonatype 的公司營運,並且是許多生態系統的預設儲存庫。

存在許多其他儲存庫,例如(現在已停用的)jcenterGoogle Maven 儲存庫

模組

隨著時間推移而發展的一段軟體,例如 Google Guava。每個模組都有一個名稱。每個模組發行版本都以模組版本最佳地表示。為了方便取用,模組可以託管在儲存庫中。

模組中繼資料

模組的發行版本提供中繼資料。中繼資料是更詳細地描述模組的資料,例如,關於成品位置或所需傳遞相依性的資訊。Gradle 提供自己的中繼資料格式,稱為 Gradle 模組中繼資料 (.module 檔案),但也支援 Maven (.pom) 和 Ivy (ivy.xml) 中繼資料。請參閱關於了解 Gradle 模組中繼資料的章節,以取得關於支援的中繼資料格式的更多資訊。

模組版本

模組版本表示已發行模組的相異變更集合。例如,18.0 表示座標為 com.google:guava:18.0 的模組版本。實際上,模組版本的方案沒有限制。時間戳記、數字和特殊後綴(如 -GA)都是允許的識別碼。最廣泛使用的版本控制策略是語意版本控制

N

O

P

平台

平台是一組旨在一起使用的模組。平台有不同的類別,對應於不同的使用案例

  • 模組集:通常是一組模組作為整體一起發布。使用集合中的一個模組通常表示我們想要對集合中的所有模組使用相同的版本。例如,如果使用 groovy 1.2,也使用 groovy-json 1.2。

  • 執行階段環境:一組已知可以很好地協同工作的函式庫,例如 Spring Platform,它建議 Spring 和與 Spring 良好協同工作的組件的版本。

  • 部署環境:Java 執行階段、應用程式伺服器等…

    此外,Gradle 定義虛擬平台

    Maven 的 BOM (bill-of-material) 是一個流行的平台,Gradle 支援它。
外掛程式

Gradle 建置在一個外掛程式系統之上。Gradle 本身主要由基礎架構組成,例如適用於所有專案類型的複雜相依性解析引擎。其餘功能來自外掛程式,包括與 Gradle 本身一起發行的「核心」外掛程式、第三方外掛程式和給定建置中的腳本外掛程式

根據套用它們的上下文,外掛程式有三種種類

  1. 實作 Plugin<Project> 的專案外掛程式,在建置腳本中套用。

  2. 實作 Plugin<Settings> 的設定外掛程式,在設定腳本中套用。

  3. 實作 Plugin<Gradle> 的 Init (Gradle) 外掛程式,在init 腳本中套用。

外掛程式可以實作為所謂的二進制外掛程式(也就是說,透過明確實作上述特定的泛型介面之一),或作為預編譯腳本外掛程式。這種區別僅僅是一個實作細節。

預編譯腳本外掛程式

等效於外掛程式,但編寫方式使其看起來像一個建置腳本,預編譯腳本外掛程式可以使用 Groovy 或 Kotlin 編寫,分別套用 groovy-gradle-pluginkotlin-dsl 外掛程式。

專案

通常稱為「模組」,每個 Gradle 專案都由 Project 實例支援,因此得名。

大多數 Gradle 專案由許多專案(通常稱為「子專案」)組成。

發布版本

應該作為單一實體發布到儲存庫以供消費者使用的檔案和中繼資料的描述。

發布版本具有名稱,並且由一個或多個成品以及關於這些成品的資訊(中繼資料)組成。

Q

R

儲存庫

儲存庫託管一組模組,每個模組都可以提供一個或多個發行版本(組件),由模組版本指示。儲存庫可以基於二進制儲存庫產品(例如,Artifactory 或 Nexus)或檔案系統中的目錄結構。如需更多資訊,請參閱宣告儲存庫

解析規則

解析規則直接影響相依性的解析行為。解析規則定義為建置邏輯的一部分。如需更多資訊,請參閱關於直接自訂相依性解析的章節。

S

腳本外掛程式

可以套用至其他 Gradle 腳本的 Gradle 腳本,包括建置腳本設定腳本init 腳本。它可以使用 Groovy 或 Kotlin 編寫,並透過 apply 方法套用至其他腳本。根據套用腳本的類型,它們由Project 實例、Settings 實例或 Gradle 實例支援。

設定腳本

settings.gradle(.kts) 腳本。設定腳本有很多職責,但最重要的職責之一是透過 include :project 宣告屬於建置一部分的專案集合。

T

任務

每個專案都由一個或多個任務組成。每個任務都應該是原子的(但通常不是),具有輸入和輸出。Gradle 執行任務以執行其工作。

任務範例包括:編譯原始程式碼、建立成品(例如 jar 或 apk)、產生 Javadoc、執行靜態分析(例如 lint)、刪除暫存檔或發布到儲存庫等。

當要求執行 Gradle 任務時,我們可以看到任務的結果。結果將是 EXECUTEDSKIPPEDFAILEDFROM-CACHEUP-TO-DATENO-SOURCE空白(表示已執行)之一。

傳遞相依性

組件的變體可能具有對其他模組的相依性才能正常工作,即所謂的傳遞相依性。託管在儲存庫上的模組發行版本可以提供中繼資料來宣告這些傳遞相依性。預設情況下,Gradle 會自動解析傳遞相依性。傳遞相依性的版本選擇可以透過宣告相依性約束來影響。

U

V

變體(組件的)

每個組件都由一個或多個變體組成。變體由一組成品組成,並定義一組相依性。它由一組屬性功能識別。

Gradle 的相依性解析是變體感知的,並且在選擇組件(即,模組的一個版本)後,為每個組件選擇一個或多個變體。如果變體選擇結果不明確,也可能會失敗,這表示 Gradle 沒有足夠的資訊來選擇多個互斥變體之一。在這種情況下,可以透過變體屬性提供更多資訊。每個 Java 組件通常提供的變體範例是 apiruntime 變體。其他範例是 JDK8 和 JDK11 變體。如需更多資訊,請參閱關於變體選擇的章節。

變體屬性

屬性用於識別和選擇變體。變體定義了一個或多個屬性,例如 org.gradle.usage=java-apiorg.gradle.jvm.version=11。當解析相依性時,會請求一組屬性,並且 Gradle 會為相依性圖中的每個組件找到最適合的變體。相容性和消除歧義規則可以針對屬性實作,以表示值之間的相容性(例如,Java 8 與 Java 11 相容,但如果請求的版本為 11 或更高版本,則應優先選擇 Java 11)。此類規則通常由外掛程式提供。如需更多資訊,請參閱關於變體選擇宣告屬性的章節。

W

X

Y

Z