Khắc phục lỗi Duplicate class giữa kotlin-stdlib và kotlin-stdlib-jdk7/8 sau nâng cấp Kotlin 1.8.0

Sau khi nâng cấp phiên bản Kotlin trong dự án lên 1.8.0, quá trình biên dịch gặp lỗi:

Duplicate class kotlin-stblib vs kotlin-stdlib-jdk7/8

Lỗi này xảy ra do sự xung đột giữa các thư viện chuẩn của Kotlin.

Thay đổi quan trọng từ Kotlin 1.8.0

Từ phiên bản 1.8.0, Kotlin chỉ còn hỗ trợ JVM 1.8 trở lên, đồng nghĩa với việc không cần khai báo riêng kotlin-stdlib-jdk7 hay kotlin-stdlib-jdk8 nữa. Thay vào đó, chỉ cần dùng kotlin-stdlib — thư viện này đã tích hợp đầy đủ API cho JDK 8.

Nếu bạn đang khai báo tường minh kotlin-stdlib-jdk7 hoặc kotlin-stdlib-jdk8 trong file build.gradle, hãy thay thế chúng bằng kotlin-stdlib.

Các cách giải quyết lỗi Duplicate class

Cách 1: Sử dụng Kotlin BOM để đồng bộ phiên bản

implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))

Kotlin BOM (Bill of Materials) giúp quản lý phiên bản đồng nhất cho toàn bộ hệ sinh thái Kotlin, tránh xung đột.

Cách 2: Ép buộc nâng cấp phiên bản cụ thể

dependencies {
    constraints {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
            version { strictly("1.8.0") }
        }
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
            version { strictly("1.8.0") }
        }
    }
}

Sử dụng strictly để đảm bảo Gradle chỉ sử dụng đúng phiên bản 1.8.0 cho các module gây xung đột.

Cách 3: Loại bỏ thủ công (không khuyến nghị)

dependencies {
    implementation("com.example:lib:1.0") {
        exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
    }
}

Cách này có thể gây mất tính năng nếu thư viện phụ thuộc vào kotlin-stdlib.

Danh sách module trong Kotlin BOM

  • org.jetbrains.kotlin:kotlin-stdlib
  • org.jetbrains.kotlin:kotlin-stdlib-jdk7
  • org.jetbrains.kotlin:kotlin-stdlib-jdk8
  • org.jetbrains.kotlin:kotlin-stdlib-js
  • org.jetbrains.kotlin:kotlin-stdlib-common
  • org.jetbrains.kotlin:kotlin-reflect
  • org.jetbrains.kotlin:kotlin-osgi-bundle
  • org.jetbrains.kotlin:kotlin-test
  • org.jetbrains.kotlin:kotlin-test-junit
  • org.jetbrains.kotlin:kotlin-test-junit5
  • org.jetbrains.kotlin:kotlin-test-testng
  • org.jetbrains.kotlin:kotlin-test-js
  • org.jetbrains.kotlin:kotlin-test-common
  • org.jetbrains.kotlin:kotlin-test-annotations-common
  • org.jetbrains.kotlin:kotlin-main-kts
  • org.jetbrains.kotlin:kotlin-script-runtime
  • org.jetbrains.kotlin:kotlin-script-util
  • org.jetbrains.kotlin:kotlin-scripting-common
  • org.jetbrains.kotlin:kotlin-scripting-jvm
  • org.jetbrains.kotlin:kotlin-scripting-jvm-host
  • org.jetbrains.kotlin:kotlin-scripting-ide-services
  • org.jetbrains.kotlin:kotlin-compiler
  • org.jetbrains.kotlin:kotlin-compiler-embeddable
  • org.jetbrains.kotlin:kotlin-daemon-client

Xem chi tiết phiên bản tương ứng tại: https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-bom

Thẻ: Kotlin Gradle kotlin-bom kotlin-stdlib JVM

Đăng vào ngày 14 tháng 7 lúc 14:29