在舊專案的 build.gradle(Module :app) 檔案中的 dependencies {}
,有時會看到以下的宣告。
build.gradle(Module :app) 檔案
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
...
}
其中 $kotlin_version
的呈述式代表 kotlin_version
是在別處宣告的變數。
通常會在 build.gradle(Project: 專案名稱) 檔案裡的 buildscript {}
宣告,
以統一 org.jetbrains.kotlin:kotlin-gradle-plugin
、org.jetbrains.kotlin:kotlin-android-extensions
的依賴項版本。
範例如下:
build.gradle(Project: 專案名稱) 檔案
buildscript {
ext.kotlin_version = "1.5.21"
repositories {
...
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
...
}
}
但是,org.jetbrains.kotlin:kotlin-stdlib-jdk8
、org.jetbrains.kotlin:kotlin-stdlib-jdk7
已不被推薦使用。
官方文件說明:
Kotlin 1.8.0 no longer supports JVM targets 1.6 and 1.7. As a result, you no longer need to declare kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 separately in build scripts because the contents of these artifacts have been merged into kotlin-stdlib.
Kotlin 1.8.0 已不再支援 JVM 目標 1.6 及 1.7。因此,不需要在構建腳本 (build scripts) 中單獨宣告 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8。這些內容已被併入 kotlin-stdlib。
If you have explicitly declared kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 as dependencies in your build scripts, then you should replace them with kotlin-stdlib.
如果你已在構建腳本 (build scripts) 中明確聲明 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8,你應該用 kotlin-stdlib 取代它們兩者的使用。
Note that mixing different versions of stdlib artifacts could lead to class duplication or to missing classes. To avoid that, the Kotlin Gradle plugin can help you align stdlib versions.
要留意的是,混合使用不同版本的 stdlib 可能會造成 class 重覆或遺失。為了避免此情形發生,你可以使用 Kotlin Gradle plugin 來協助你對齊 stdlib 版本。
明天來談談若是其他依賴項有使用到 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 的處理方式。
資料來源
Kotlin - Updated JVM compilation target
stackoverflow - Duplicate class in Kotlin Android