Gradle 支援各種來源來解析相依性,以適應不同的元數據格式和連線方法。您可以從以下位置解析相依性:
-
相容於 Maven 的組件儲存庫(例如 Maven Central)
-
相容於 Ivy 的組件儲存庫(包括自訂佈局)
Maven 儲存庫
許多組織將相依性託管在 Maven 儲存庫中。Gradle 可以透過指定其 URL 來宣告 Maven 儲存庫
repositories {
maven {
url = uri("http://repo.mycompany.com/maven2")
}
}
repositories {
maven {
url = "http://repo.mycompany.com/maven2"
}
}
複合 Maven 儲存庫
有時,POM 發佈在一個位置,而 JAR 則在另一個位置。您可以如下定義此類儲存庫
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")
}
}
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 儲存庫中的相依性,即本機檔案系統上的儲存庫
repositories {
maven {
url = uri(layout.buildDirectory.dir("repo"))
}
}
repositories {
maven {
url = uri(layout.buildDirectory.dir("repo"))
}
}
Gradle 可以使用 本機 Maven 儲存庫中的相依性。這對於希望在發佈外掛程式之前在本機測試其設定的團隊很有用。
您應確保使用本機 Maven 儲存庫是必要的,然後再將 mavenLocal()
新增至您的建置腳本
repositories {
mavenLocal()
}
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
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
}
}
repositories {
ivy {
url = "http://repo.mycompany.com/repo"
}
}
具名佈局 Ivy 儲存庫
您可以指定您的儲存庫遵循 Ivy 預設佈局
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
layout("maven")
}
}
repositories {
ivy {
url = "http://repo.mycompany.com/repo"
layout "maven"
}
}
有效的具名佈局值為 gradle
(預設)、maven
和 ivy
。如需更多詳細資訊,請參閱 API 文件中的 IvyArtifactRepository.layout(java.lang.String)。
自訂模式佈局 Ivy 儲存庫
若要定義具有非標準佈局的 Ivy 儲存庫,您可以設定模式佈局
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
patternLayout {
artifact("[module]/[revision]/[type]/[artifact].[ext]")
}
}
}
repositories {
ivy {
url = "http://repo.mycompany.com/repo"
patternLayout {
artifact "[module]/[revision]/[type]/[artifact].[ext]"
}
}
}
對於從不同位置獲取 Ivy 檔案和組件的 Ivy 儲存庫,請定義個別模式
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")
}
}
}
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 樣式的佈局,並使用正斜線取代點
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
patternLayout {
artifact("[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
setM2compatible(true)
}
}
}
repositories {
ivy {
url = "http://repo.mycompany.com/repo"
patternLayout {
artifact "[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
m2compatible = true
}
}
}
已驗證的 Ivy 儲存庫
您可以為需要驗證的 Ivy 儲存庫指定憑證。請參閱支援的儲存庫協定以了解驗證選項。
本機 Ivy 儲存庫
Gradle 可以使用本機 Ivy 儲存庫中的相依性,即本機檔案系統上的儲存庫
repositories {
ivy {
// URL can refer to a local directory
url = uri("../local-repo")
}
}
repositories {
ivy {
// URL can refer to a local directory
url = file("../local-repo")
}
}
扁平目錄儲存庫
有些專案將相依性儲存在共用磁碟機或專案的原始碼中,而不是使用二進制儲存庫。若要使用扁平檔案系統目錄作為儲存庫,您可以像這樣配置它
repositories {
flatDir {
dirs("lib")
}
flatDir {
dirs("lib1", "lib2")
}
}
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
,它將使用後者的元數據。