Gradle 支援各種來源來解析相依性,以適應不同的元數據格式和連線方法。您可以從以下位置解析相依性:

Maven 儲存庫

許多組織將相依性託管在 Maven 儲存庫中。Gradle 可以透過指定其 URL 來宣告 Maven 儲存庫

build.gradle.kts
repositories {
    maven {
        url = uri("http://repo.mycompany.com/maven2")
    }
}
build.gradle
repositories {
    maven {
        url = "http://repo.mycompany.com/maven2"
    }
}

複合 Maven 儲存庫

有時,POM 發佈在一個位置,而 JAR 則在另一個位置。您可以如下定義此類儲存庫

build.gradle.kts
repositories {
    maven {
        // Look for POMs and artifacts, such as JARs, here
        url = uri("http://repo2.mycompany.com/maven2")
        // Look for artifacts here if not found at the above location
        artifactUrls("http://repo.mycompany.com/jars")
        artifactUrls("http://repo.mycompany.com/jars2")
    }
}
build.gradle
repositories {
    maven {
        // Look for POMs and artifacts, such as JARs, here
        url = "http://repo2.mycompany.com/maven2"
        // Look for artifacts here if not found at the above location
        artifactUrls "http://repo.mycompany.com/jars"
        artifactUrls "http://repo.mycompany.com/jars2"
    }
}

Gradle 將首先在基本 URL 尋找 POM 和組件,如果找不到組件,它將檢查額外的 artifactUrls

已驗證的 Maven 儲存庫

您可以為需要驗證的 Maven 儲存庫指定憑證。請參閱支援的儲存庫協定以了解驗證選項。

本機 Maven 儲存庫

Gradle 可以使用本機 Maven 儲存庫中的相依性,即本機檔案系統上的儲存庫

build.gradle.kts
repositories {
    maven {
        url = uri(layout.buildDirectory.dir("repo"))
    }
}
build.gradle
repositories {
    maven {
        url = uri(layout.buildDirectory.dir("repo"))
    }
}

Gradle 可以使用 本機 Maven 儲存庫中的相依性。這對於希望在發佈外掛程式之前在本機測試其設定的團隊很有用。

您應確保使用本機 Maven 儲存庫是必要的,然後再將 mavenLocal() 新增至您的建置腳本

build.gradle.kts
repositories {
    mavenLocal()
}
build.gradle
repositories {
    mavenLocal()
}
Gradle 管理自己的 快取,即使您從遠端 Maven 儲存庫解析相依性,也不需要宣告本機 Maven 儲存庫。

Gradle 使用與 Maven 相同的邏輯來識別本機 Maven 快取的位置。如果在使用者主目錄 (~/.m2/settings.xml) 中定義了 settings.xml 檔案,則此位置優先於 M2_HOME/conf,否則 Gradle 預設為 ~/.m2/repository

作為一般建議,請避免使用 mavenLocal()。與 Maven 建置不同,Gradle 可以使用專案相依性在專案之間共享組件。發佈到本機 maven 儲存庫對於在專案之間共享組件不是必要的。

Ivy 儲存庫

許多組織將相依性託管在 Ivy 儲存庫中。

標準佈局 Ivy 儲存庫

若要宣告具有標準佈局的 Ivy 儲存庫,只需指定 URL

build.gradle.kts
repositories {
    ivy {
        url = uri("http://repo.mycompany.com/repo")
    }
}
build.gradle
repositories {
    ivy {
        url = "http://repo.mycompany.com/repo"
    }
}

具名佈局 Ivy 儲存庫

您可以指定您的儲存庫遵循 Ivy 預設佈局

build.gradle.kts
repositories {
    ivy {
        url = uri("http://repo.mycompany.com/repo")
        layout("maven")
    }
}
build.gradle
repositories {
    ivy {
        url = "http://repo.mycompany.com/repo"
        layout "maven"
    }
}

有效的具名佈局值為 gradle(預設)、mavenivy。如需更多詳細資訊,請參閱 API 文件中的 IvyArtifactRepository.layout(java.lang.String)

自訂模式佈局 Ivy 儲存庫

若要定義具有非標準佈局的 Ivy 儲存庫,您可以設定模式佈局

build.gradle.kts
repositories {
    ivy {
        url = uri("http://repo.mycompany.com/repo")
        patternLayout {
            artifact("[module]/[revision]/[type]/[artifact].[ext]")
        }
    }
}
build.gradle
repositories {
    ivy {
        url = "http://repo.mycompany.com/repo"
        patternLayout {
            artifact "[module]/[revision]/[type]/[artifact].[ext]"
        }
    }
}

對於從不同位置獲取 Ivy 檔案和組件的 Ivy 儲存庫,請定義個別模式

build.gradle.kts
repositories {
    ivy {
        url = uri("http://repo.mycompany.com/repo")
        patternLayout {
            artifact("3rd-party-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
            artifact("company-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
            ivy("ivy-files/[organisation]/[module]/[revision]/ivy.xml")
        }
    }
}
build.gradle
repositories {
    ivy {
        url = "http://repo.mycompany.com/repo"
        patternLayout {
            artifact "3rd-party-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
            artifact "company-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
            ivy "ivy-files/[organisation]/[module]/[revision]/ivy.xml"
        }
    }
}

您可以選擇性地為「組織」部分啟用 Maven 樣式的佈局,並使用正斜線取代點

build.gradle.kts
repositories {
    ivy {
        url = uri("http://repo.mycompany.com/repo")
        patternLayout {
            artifact("[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
            setM2compatible(true)
        }
    }
}
build.gradle
repositories {
    ivy {
        url = "http://repo.mycompany.com/repo"
        patternLayout {
            artifact "[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
            m2compatible = true
        }
    }
}

已驗證的 Ivy 儲存庫

您可以為需要驗證的 Ivy 儲存庫指定憑證。請參閱支援的儲存庫協定以了解驗證選項。

本機 Ivy 儲存庫

Gradle 可以使用本機 Ivy 儲存庫中的相依性,即本機檔案系統上的儲存庫

build.gradle.kts
repositories {
    ivy {
        // URL can refer to a local directory
        url = uri("../local-repo")
    }
}
build.gradle
repositories {
    ivy {
        // URL can refer to a local directory
        url = file("../local-repo")
    }
}

扁平目錄儲存庫

有些專案將相依性儲存在共用磁碟機或專案的原始碼中,而不是使用二進制儲存庫。若要使用扁平檔案系統目錄作為儲存庫,您可以像這樣配置它

build.gradle.kts
repositories {
    flatDir {
        dirs("lib")
    }
    flatDir {
        dirs("lib1", "lib2")
    }
}
build.gradle
repositories {
    flatDir {
        dirs 'lib'
    }
    flatDir {
        dirs 'lib1', 'lib2'
    }
}

此組態新增了在指定目錄中搜尋相依性的儲存庫。

不鼓勵使用扁平目錄儲存庫,因為它們不支援 Ivy XML 或 Maven POM 檔案等元數據格式。

一般而言,二進制相依性應從外部儲存庫取得,但如果外部儲存相依性不是選項,則偏好使用本機檔案 URL 宣告 Maven 或 Ivy 儲存庫。

當從扁平目錄儲存庫解析相依性時,Gradle 會根據組件的存在動態產生臨時相依性元數據。相較於扁平目錄儲存庫產生的模組,Gradle 更偏好具有真實元數據的模組。因此,扁平目錄無法覆蓋來自其他宣告儲存庫且具有真實元數據的組件。

例如,如果 Gradle 在扁平目錄中找到 jmxri-1.2.1.jar,而在另一個儲存庫中找到 jmxri-1.2.1.pom,它將使用後者的元數據。