Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)

이지훈·2023년 2월 10일
2
post-custom-banner

문제 발생

Execution failed for task ':app:checkDebugDuplicateClasses'.
A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable ~

최근에 새로 프로젝트를 생성하여 라이브러리를 넣고 build 를 하던 중 다음과 같은 에러가 발생하는 것을 확인할 수 있었다.

Kotlin 버전이 두개 (1.8.0, 1.7.20)이 같은 프로젝트내에 있어서 중복되었다는 에러인 듯 했다.

따라서 StackOverflow 에 검색을 해봤지만 해결 방법들이 뭔가 석연치 않다는 생각이 들었다. 해당 kotlin 관련 의존성이 내 프로젝트엔 존재하지 않는데 버전을 바꿔보라는 등의 해결 방법을 제시해주었다.

그래도 다행히 다른 답변을 통해 에러를 해결할 수 있는 방법을 알 수 있었고, 내가 발견한 해결책도 제시해보도록 하겠다

해결 방법 1. StackOverflow 답변

duplicate-class-in-kotlin-android

build.gradle 에 다음을 추가해라

dependencies {
    modules {
        module("org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
            replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk7 is now part of kotlin-stdlib")
        }
        module("org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
            replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk8 is now part of kotlin-stdlib")
        }
    }
}

해결 방법 2. 범인 찾기

갑자기 뚱딴지 같은 소리로 들릴 수 있겠는데 바닐라 프로젝트 즉, 라이브러리를 하나도 추가하지 않은 상태로 프로젝트를 빌드했을 경우 정상적으로 빌드가 되었던 것을 확인할 수 있었다.

그렇다면 어떤 라이브러리를 추가하면서 해당 라이브러리의 버전이 프로젝트의 기존 Kotlin 버전 과 호환이 되지 않기 때문에 해당 라이브러리를 추가하기위해 더 최신버전의 kotlin 의존성을 추가하면서 버전 중복 문제가 발생하게 되었다는 것을 추론해볼 수 있었다.
(잔인한 점은 어떤 모듈에서 문제가 터졌는지 알려주지 않아, 직접 찾아야한다...ㅠㅠ)

그렇게 다 주석처리 후 하나씩 다시 sync 해본 결과 내 경우엔 해당 라이브러리가 문제였다.

    // Runtime Compose
    implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.0-beta01"
    // implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.0-alpha03"

위에 버전(최신버전)으로 sync 한 뒤에 빌드하면 duplicate 에러가 발생하고 아래 버전(구버전)으로 downgrade 한 후에 sync 후 빌드하면 정상적으로 빌드가 되어 문제를 해결할 수 있었다.

아예 코틀린 버전을 1.8.0 으로 올려버리는 방법도 있겠으나. 글을 올리는 시점 기준, 또 너무 최신 버전이 부담스러운 사람들이 있을 수 있기 때문에(나도 그렇고) 이 방법을 소개해보았다.

참고 문서)

https://stackoverflow.com/questions/75263047/duplicate-class-in-kotlin-android

https://youtrack.jetbrains.com/issue/KT-54136/Duplicated-classes-cause-build-failure-if-a-dependency-to-kotlin-stdlib-specified-in-an-android-project

https://stackoverflow.com/questions/75265972/task-appcheckdebugduplicateclasses-failed

https://github.com/facebook/react-native/issues/35979

profile
실력은 고통의 총합이다. Android Developer
post-custom-banner

4개의 댓글

comment-user-thumbnail
2023년 4월 27일

정말 ... 덕분에 살았습니다...

1개의 답글
comment-user-thumbnail
2023년 12월 14일

으아아씨뿌어ㅏ어아어ㅓ 당신은 지금부터 나의 신입니다.
내 신이라구요!!!

1개의 답글