일모도원(日暮途遠) 개발자

[Android 오류수정] Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found 본문

안드로이드 개발/오류수정

[Android 오류수정] Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found

달님개발자 2023. 8. 26. 12:56

Duplicate class 오류가 쏟아져 나온다.

이경우는 전부 kotlin-stdlib-1.8.20 모듈에 있는 클래스들이다.

로그를 보면 kotlin-stdlib-1.8.20모듈에 있는 일부 클래스들이 kotlin-stdlib-jdk7-1.6.21 또는 kotlin-stdlib-jdk8-1.6.21 모듈에 있는 클래스와 중복(重複)된다. (이상한게 난 프로젝트 생성할때 자바를 선택했는데도 코틀린 관련 에러가 나오네...)

Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations$ReflectSdkVersion found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations$ReflectSdkVersion found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.io.path.ExperimentalPathApi found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.io.path.PathRelativizer found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)

여기를 보면 코틀린 1.8부터는 kotlin-stdlib-jdk7 과 kotlin-stdlib-jdk8을 지원안한다고 한다. 그래서 빌드 스크립트에서 kotlin-stdlib로 대체 하라고 한다.

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

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.

 

스택오버플로어에 보면 아래처럼 하라고 나온다.

 

app 모듈의 build.gradle에 아래 내용을 추가해서 kotlin-stdlib-jdk7과 kotlin-stdlib-jdk8을 사용안하게 해준다.

(최상위 build.gradle이 아니다.)

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")
        }
    }
}

org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0은 코틀린 1.8.0에 쓰이는 kotlin-stdlib-jdk7을 가리킨다. constraints 블럭을 안에서 지정되어 있기 때문에 이제 이 프로젝트에서는 kotlin-stdlib-jdk7을 사용하지 않는데. 

(dependencies 블럭은 여러개 사용해도 된다. 한개의 dependencies에 너무 많은 내용이 있으면 읽기 어려울수 있으므로 그룹화 지어서 다른 dependencies 블럭에 내용을 적어도 된다.)

 

 

build.gradle을 수정했기 때문에 다시 Sync를 하고 실행하면 저 에러는 사라진다.