안드로이드 앱에서 Execution failed for task ‘:app:kspDebugKotlin’ 쉽게 해결하기

안드로이드 앱에서 Room 데이터베이스를 사용하려다가 ksp 와 관련하여 Java version 불일치로 안드로이드 앱 실행이 실패하였다. 이에 실패 없이 손쉽게 해결하는 방법을 제시한다 (English version of this article: https://hhtt.kr/102903).

Room, ksp 와 관련하여 자바 버전 불일치 오류 발생

안드로이드 앱에서의 Room 데이터베이스 사용을 연습하다가 앱 실행 중 오류가 발생하면서 안드로이드 스튜디오에서 다음의 내용이 출력되었다:

Execution failed for task ':app:kspDebugKotlin'.
 'compileDebugJavaWithJavac' task (current target is 1.8) and 'kspDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.

Room 과 ksp 를 넣기 전에는 문제없이 실행되었었다. 간단히 해결될 줄 알았는데 검색도 전혀 도움이 되지 않고 어젯밤에 여러 시간을 허비하다가 결국 해결도 못 하고 잠이 들었다.

여러 사람이 제시하는 해법을 모두 적용해 보았지만 효과가 없었다.

자다가 좋은 생각이 떠올랐다.

문제도 해결 못 하고 잠을 자려니 기분이 좋지 않았다. 자고 있었는데 어느 순간 깨달음이 왔다.

‘Room 데이터베이스 사용을 설명하는 구글 codelab 앱은 아무 문제없이 잘 실행되었는데? 그래, 그거하고 내 설정을 비교해 보면 금방 해결되겠군. 날고 기는 구글의 개발자들이 좀 잘 해 놓았을라고.’

정답을 옆에 두고도 고생만 하고 있었다.

구글 codelab 프로젝트와 내 프로젝트를 비교

일단 내 프로젝트와 구글 codelab 프로젝트를 하나씩 안드로이드 스튜디오에서 열었다 (New window 로 열었다).

어디에서 문제가 생겼는지 알기 위해서, 설정을 한 군데씩만 바꿔가면서 앱 실행을 시도하였다.

오류 메시지에서 Java 버전을 운운하므로 일단은 File > Project Structure > Module 로 갔다. 여기서 두 군데를 codelab 에 있는 것처럼 다음과 같이 바꾸었다 (원래는 각각 JavaVersion.VERSION_1_8 로 되어 있었다):

Source Compatibility:
$JavaVersion.VERSION_17
Target Compatibility:
$JavaVersion.VERSION_17

Sync Now > 실행함. 오류가 발생하였지만 메시지가 달라졌다:

Execution failed for task ':app:compileDebugKotlin'.
> 'compileDebugJavaWithJavac' task (current target is 17) and 'compileDebugKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version.

두 프로젝트에서 각각 좌변의 Project 탭을 클릭하였다. 드롭다운 메뉴에서 Android 를 선택하였다. 이곳에 설정 파일이 여려 개 있다. 하나씩 비교해 보았다. 역시 효과가 있었던 설정 파일은 build.gradle.kts (:app) 이었다. 이 파일에서 다음과 같이 바꾸었다 (원래는 17 대신 1.8 이었음):

kotlinOptions {
        jvmTarget = "17"
    }

Sync Now > 실행함. 오류가 발생하였지만 메시지가 또 달라졌다:

This version (1.4.3) of the Compose Compiler requires Kotlin version 1.8.10 but you appear to be using Kotlin version 1.8.21 which is not known to be compatible.  Please consult the Compose-Kotlin compatibility map located at https://developer.android.com/jetpack/androidx/releases/compose-kotlin to choose a compatible version pair (or `suppressKotlinVersionCompatibilityCheck` but don't say I didn't warn you!).

이 메지시를 참고하여 build.gradle.kts (:app) 에서 다음과 같이 바꾸었다 (원래는 1.4.7 대신 1.4.3 이었음):

composeOptions {
        kotlinCompilerExtensionVersion = "1.4.7"
    }

메시지에 나와 있는 사이트를 참고하면 된다. https://developer.android.com/jetpack/androidx/releases/compose-kotlin

Sync Now > 실행함. > 앱이 정상적으로 실행되었다.

요약

위에 나오는 숫자들은 내 실정에 맞는 것으므로 각자 자신의 실정에 맞게 적용해야 한다.

한 줄 요약: 이런 문제가 생겼을 때 잘 실행되는 프로젝트와 설정을 비교해 보면 쉽게 해결할 수 있다.

Leave a Comment