API 文件 | ResolutionStrategy |
---|
定義關於依賴項解析的策略。例如,強制指定某些依賴項版本、替換、衝突解析或快照逾時。
範例
plugins { id 'java' // so that there are some configurations } configurations.all { resolutionStrategy { // fail eagerly on version conflict (includes transitive dependencies) // e.g. multiple different versions of the same dependency (group and name are equal) failOnVersionConflict() // prefer modules that are part of this build (multi-project or composite build) over external modules preferProjectModules() // force certain versions of dependencies (including transitive) // *append new forced modules: force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4' // *replace existing forced modules with new ones: forcedModules = ['asm:asm-all:3.3.1'] // add dependency substitution rules dependencySubstitution { substitute module('org.gradle:api') using project(':api') substitute project(':util') using module('org.gradle:util:3.0') } // cache dynamic versions for 10 minutes cacheDynamicVersionsFor 10*60, 'seconds' // don't cache changing modules at all cacheChangingModulesFor 0, 'seconds' } }
屬性 | 描述 |
capabilitiesResolution | 功能解析策略。 |
componentSelection | 目前設定的版本選擇規則物件。 |
dependencySubstitution | 此組態設定的依賴項替換規則集。 |
forcedModules | 傳回目前設定的強制模組。有關強制版本的更多資訊,請參閱 |
方法 | 描述 |
activateDependencyLocking() | 在 Gradle 中啟用依賴項鎖定支援。一旦在組態中啟用,就可以儲存解析結果,然後在後續建置中重複使用。這在使用動態版本時能夠實現可重現的建置。 |
cacheChangingModulesFor(value, units) | 設定快取變更模組的時間長度,單位以字串表示。 |
cacheChangingModulesFor(value, units) | 設定快取變更模組的時間長度。 |
cacheDynamicVersionsFor(value, units) | 設定快取動態版本的時間長度,單位以字串表示。 |
cacheDynamicVersionsFor(value, units) | 設定快取動態版本的時間長度。 |
componentSelection(action) | componentSelection 區塊提供規則來篩選或阻止某些組件出現在解析結果中。 |
deactivateDependencyLocking() | 在 Gradle 中停用依賴項鎖定支援。 |
dependencySubstitution(action) | 為此組態設定依賴項替換規則集。此動作接收一個 |
disableDependencyVerification() | 為此組態停用依賴項驗證。在停用驗證時應始終小心,尤其要避免為外掛停用驗證,因為外掛可能會使用它來停用自身驗證。 |
eachDependency(rule) | 新增一個依賴項替換規則,該規則在解析組態時為每個依賴項(包括傳遞依賴項)觸發。此動作接收一個 |
enableDependencyVerification() | 為此組態啟用依賴項驗證。 |
failOnChangingVersions() | 如果呼叫此方法,Gradle 將確保沒有變更版本參與解析。這可以用於您想要確保建置可重現的情況下,無需依賴依賴項鎖定。 |
failOnDynamicVersions() | 如果呼叫此方法,Gradle 將確保在產生的依賴項圖表中沒有使用動態版本。實際上,這表示如果解析的依賴項圖表包含一個模組,並且參與該模組選擇的版本包含至少一個動態版本,則如果解析結果可能因該版本選擇器而變更,解析將會失敗。這可以用於您想要確保建置可重現的情況下,無需依賴依賴項鎖定。 |
failOnNonReproducibleResolution() | 設定 Gradle 在預期解析結果不穩定時使建置失敗,也就是說,它包含動態版本或變更版本,因此結果可能會根據執行建置的時間而變更。此方法等效於同時呼叫 |
failOnVersionConflict() | 如果發生衝突,Gradle 預設使用衝突版本中的最新版本。但是,您可以變更此行為。使用此方法設定解析在任何版本衝突時立即失敗,例如,在同一個 |
force(moduleVersionSelectorNotations) | 允許強制指定某些依賴項版本,包括傳遞依賴項。附加要考慮的新強制模組(在解析依賴項時)。 |
getUseGlobalDependencySubstitutionRules() | Gradle 隱式地為整個建置樹中的所有組態註冊依賴項替換規則,以尋找其他包含建置中的專案。這些規則預設始終處於活動狀態。但是,在某些情況下,某些組態在解析時不應套用這些規則。例如,如果應該發現模組的二進位版本,而該版本也由另一個建置中的專案表示。此屬性可用於停用這些全域替換規則。 |
preferProjectModules() | Gradle 可以僅通過版本號解析衝突,或優先處理專案依賴項而不是二進位檔。預設值為按版本號。 |
sortArtifacts(sortOrder) | 指定已解析成品的排序方式。選項為: |
CapabilitiesResolution
capabilitiesResolution
(唯讀)
功能解析策略。
ComponentSelectionRules
componentSelection
(唯讀)
目前設定的版本選擇規則物件。
DependencySubstitutions
dependencySubstitution
(唯讀)
此組態設定的依賴項替換規則集。
Set
<ModuleVersionSelector
>
forcedModules
Set
<ModuleVersionSelector
>傳回目前設定的強制模組。有關強制版本的更多資訊,請參閱 ResolutionStrategy.force(java.lang.Object[])
ResolutionStrategy
activateDependencyLocking
()
在 Gradle 中啟用依賴項鎖定支援。一旦在組態中啟用,就可以儲存解析結果,然後在後續建置中重複使用。這在使用動態版本時能夠實現可重現的建置。
void
cacheChangingModulesFor
(int
value, String
units)
設定快取變更模組的時間長度,單位以字串表示。
用於 ResolutionStrategy.cacheChangingModulesFor(int, java.util.concurrent.TimeUnit)
的便利方法,單位以字串表示。單位通過呼叫 valueOf(String)
方法解析,該方法來自 TimeUnit
,並使用大寫字串值。
void
cacheChangingModulesFor
(int
value, TimeUnit
units)
設定快取變更模組的時間長度。
Gradle 快取變更模組的內容和成品。預設情況下,這些快取值保留 24 小時,之後快取條目過期,模組將再次解析。
使用此方法提供自訂過期時間,在此時間之後,任何變更模組的快取條目都將過期。
void
cacheDynamicVersionsFor
(int
value, String
units)
設定快取動態版本的時間長度,單位以字串表示。
用於 ResolutionStrategy.cacheDynamicVersionsFor(int, java.util.concurrent.TimeUnit)
的便利方法,單位以字串表示。單位通過呼叫 valueOf(String)
方法解析,該方法來自 TimeUnit
,並使用大寫字串值。
void
cacheDynamicVersionsFor
(int
value, TimeUnit
units)
設定快取動態版本的時間長度。
Gradle 保留動態版本 => 已解析版本的快取(即 2.+ => 2.3)。預設情況下,這些快取值保留 24 小時,之後快取條目過期,動態版本將再次解析。
使用此方法提供自訂過期時間,在此時間之後,任何動態版本的快取值都將過期。
ResolutionStrategy
componentSelection
(Action
<? super ComponentSelectionRules
>
action)
Action
<? super ComponentSelectionRules
>componentSelection 區塊提供規則來篩選或阻止某些組件出現在解析結果中。
ResolutionStrategy
deactivateDependencyLocking
()
在 Gradle 中停用依賴項鎖定支援。
ResolutionStrategy
dependencySubstitution
(Action
<? super DependencySubstitutions
>
action)
Action
<? super DependencySubstitutions
>為此組態設定依賴項替換規則集。此動作接收一個 DependencySubstitutions
的實例,然後可以使用替換規則對其進行設定。
範例
// add dependency substitution rules configurations.all { resolutionStrategy.dependencySubstitution { // Substitute project and module dependencies substitute module('org.gradle:api') using project(':api') substitute project(':util') using module('org.gradle:util:3.0') // Substitute one module dependency for another substitute module('org.gradle:api:2.0') using module('org.gradle:api:2.1') } }
ResolutionStrategy
disableDependencyVerification
()
為此組態停用依賴項驗證。在停用驗證時應始終小心,尤其要避免為外掛停用驗證,因為外掛可能會使用它來停用自身驗證。
ResolutionStrategy
eachDependency
(Action
<? super DependencyResolveDetails
>
rule)
Action
<? super DependencyResolveDetails
>新增一個依賴項替換規則,該規則在解析組態時為每個依賴項(包括傳遞依賴項)觸發。此動作接收一個 DependencyResolveDetails
的實例,可用於找出正在解析的依賴項並影響解析過程。範例
configurations { compileClasspath.resolutionStrategy { eachDependency { DependencyResolveDetails details -> //specifying a fixed version for all libraries with 'org.gradle' group if (details.requested.group == 'org.gradle') { details.useVersion '1.4' } } eachDependency { details -> //multiple actions can be specified if (details.requested.name == 'groovy-all') { //changing the name: details.useTarget group: details.requested.group, name: 'groovy', version: details.requested.version } } } }
規則按照宣告順序評估。規則在強制模組套用後評估(請參閱 ResolutionStrategy.force(java.lang.Object[])
ResolutionStrategy
enableDependencyVerification
()
為此組態啟用依賴項驗證。
ResolutionStrategy
failOnChangingVersions
()
如果呼叫此方法,Gradle 將確保沒有變更版本參與解析。這可以用於您想要確保建置可重現的情況下,無需依賴依賴項鎖定。
ResolutionStrategy
failOnDynamicVersions
()
如果呼叫此方法,Gradle 將確保在產生的依賴項圖表中沒有使用動態版本。實際上,這表示如果解析的依賴項圖表包含一個模組,並且參與該模組選擇的版本包含至少一個動態版本,則如果解析結果可能因該版本選擇器而變更,解析將會失敗。這可以用於您想要確保建置可重現的情況下,無需依賴依賴項鎖定。
ResolutionStrategy
failOnNonReproducibleResolution
()
設定 Gradle 在預期解析結果不穩定時使建置失敗,也就是說,它包含動態版本或變更版本,因此結果可能會根據執行建置的時間而變更。此方法等效於同時呼叫 ResolutionStrategy.failOnDynamicVersions()
和 ResolutionStrategy.failOnChangingVersions()
。
ResolutionStrategy
failOnVersionConflict
()
如果發生衝突,Gradle 預設使用衝突版本中的最新版本。但是,您可以變更此行為。使用此方法設定解析在任何版本衝突時立即失敗,例如,在同一個 Configuration
中同一依賴項(群組和名稱相同)的多個不同版本。檢查包括第一層和傳遞依賴項。請參閱以下範例
plugins { id 'java' // so that there are some configurations } configurations.all { resolutionStrategy.failOnVersionConflict() }
ResolutionStrategy
force
(Object
...
moduleVersionSelectorNotations)
Object
...允許強制指定某些依賴項版本,包括傳遞依賴項。附加要考慮的新強制模組(在解析依賴項時)。
它接受以下標記法
- 字串格式為:'群組:名稱:版本',例如:'org.gradle:gradle-core:1.0'
ModuleVersionSelector
的實例- 上述任何集合或陣列都將自動扁平化
範例
plugins { id 'java' // so that there are some configurations } configurations.all { resolutionStrategy.force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4' }
Gradle 隱式地為整個建置樹中的所有組態註冊依賴項替換規則,以尋找其他包含建置中的專案。這些規則預設始終處於活動狀態。但是,在某些情況下,某些組態在解析時不應套用這些規則。例如,如果應該發現模組的二進位版本,而該版本也由另一個建置中的專案表示。此屬性可用於停用這些全域替換規則。
Gradle 可以僅通過版本號解析衝突,或優先處理專案依賴項而不是二進位檔。預設值為按版本號。
這適用於第一層和傳遞依賴項。
plugins { id 'java' // so that there are some configurations } configurations.all { resolutionStrategy.preferProjectModules() }
指定已解析成品的排序方式。選項為:
- <UNHANDLED-LINK>SortOrder#DEFAULT</UNHANDLED-LINK>:不指定排序方式。Gradle 將以預設順序提供成品。
- <UNHANDLED-LINK>SortOrder#CONSUMER_FIRST</UNHANDLED-LINK>:消耗組件的成品應在其依賴項的成品之前顯示。
- <UNHANDLED-LINK>SortOrder#DEPENDENCY_FIRST</UNHANDLED-LINK>:消耗組件的成品應在其依賴項的成品之後顯示。
將盡最大努力根據提供的 SortOrder
排序成品,但在存在依賴項循環的情況下,不保證任何保證。注意:對於特定的 Gradle 版本,成品排序將是一致的。相同輸入的多個解析將產生相同的輸出,且順序相同。