iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0

Day 19 的結尾帶到其他依賴項有使用到 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 的處理方式。

A component may have two different kinds of dependencies:

direct dependencies are directly required by the component. A direct dependency is also referred to as a first level dependency. For example, if your project source code requires Guava, Guava should be declared as direct dependency.

transitive dependencies are dependencies that your component needs, but only because another dependency needs them.

官方文件說明,一個元件可能有兩種不同類型的依賴關係。

  • 直接依賴項是元件直接需要的。直接依賴項也被稱作第一級依賴項。舉例來說,如果你的專案原始碼需要 Guava,則應將 Guava 宣告為直接依賴項。

  • 傳遞依賴項 (transitive dependencies) 是元件需要的依賴項。但只是由於另一個依賴項需要它們。

當遇到依賴項衝突時,我們可以試著使用 constraints {}。示例如下:

build.gradle(Module :app)

build.gradle(Module :app) 檔案

dependencies {
    constraints {
            implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
                because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
            }
            implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
                because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
            }
        }
    ...
}

今天先提供解法,明天再繼續瞭解依賴項衝突發生的原因,以及 constraints {} 達到了什麼作用。

資料來源的 Understand Gradle Dependency Resolution Easier 有提供大量圖解,本系列將於近日摘要翻譯此篇文章。

資料來源
Gradle - Upgrading versions of transitive dependencies
stackoverflow - What's the use of constraint in Gradle dependencies resolution?
Eyle - Understand Gradle Dependency Resolution Easier
云音乐技术团队 - 读懂 gradle dependencies


上一篇
[Day 19] stdlib 的依賴項衝突
下一篇
[Day 21] 認識依賴項解析 (Dependency Resolution)
系列文
[Android] 怎麼蓋地基?論 build.gradle 與它的快樂夥伴們30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言