Gradle Kotlin DSL (build.gradle.kts
)를 잘 모르고 사용하려다 발생한 문제들을 기록해둔다.
발생했던 문제는 총 두 가지였다.
하나씩 정리를 해 놓으려 한다.
Room 관련 공식문서에 나온 대로 dependency를 추가하던 중이었다.
dependencies {
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")
annotationProcessor("androidx.room:room-compiler:$room_version")
...
}
이 부분을 추가하기 위해 ksp를 함께 추가하려고 했다.
위의 ksp 이전 공식문서에 나온대로,
프로젝트 수준 build.gradle.kts
에
plugins {
...
id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}
이렇게 추가하고,
모듈 수준 build.gradle.kts
에 ksp 설정과 위의 room 관련 설정을 포함해서 아래와 같은 상태가 됐다.
plugins {
...
id("com.google.devtools.ksp")
}
dependencies {
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")
ksp("androidx.room:room-compiler:$room_version")
...
}
이 상태까지 만든 후 Sync Now를 진행하니, ksp를 인식하지 못하는 에러가 발생했다..
ksp 부분만 먼저 추가 후 Sync Now를 진행했다.
프로젝트 수준 build.gradle.kts
plugins {
...
id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}
모듈 수준 build.gradle.kts
plugins {
...
id("com.google.devtools.ksp")
}
그 후 위에 넣었던 것처럼 room 설정에 ksp를 사용하니 Android Studio에서 불이 들어오면서 인식이 됐다.
그런데 Room 설정을 추가 후 다시 Sync Now를 했더니 두 번째 문제가 생겼다..
Unable to load class 'org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData' org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
에러가 발생해서 열심히 구글링했다..
그러던 중 ksp 관련 내용이 있는 issue가 있어 보다보니 해결을 할 수 있었다.
24.09.02. 수정
우선 아래의 글 내용처럼 단순하게 버전을 올리기만 하면 sync는 되지만 정작 앱을 실행하면 오류를 만날 수 있다..
android studio unable to load class 'org.jetbrains.kotlin.buildtools.api.SourcesChanges'
나는 이런 에러가 났는데, 구글링을 하다 보니 다른 에러가 나는 사람들도 있는 것 같다.
구글링하다가 두 블로그(첫 번째, 두 번째)를 참고해서 해결할 수 있었다.
결과적으로 공식문서에 나온 말(프로젝트의 kotlin 버전에 맞는 ksp 버전을 선택하세요!)이 맞았다...ㅋㅋㅋㅋ
그리고 Sync가 된다고 앱이 무조건 실행되는 건 아니라는 사실을 깨달았다..
이 아래의 글은 수정 전 내용이다.
이 답변에서는 ksp 버전을 올리니 해결이 되었다고 했다.
사실 이 글을 보기 전까지 공식문서에 예제에 있는 버전을 그대로 복붙해서 썼으니 당연히 최신 버전일 것이라 생각했다...
그런데 이 답변에 써 있는 버전이 내가 공식문서 예제에서 가져온 버전보다 높아서, 설마..? 하는 마음으로 ksp 릴리스 페이지에 들어가 보았다.
릴리스 페이지 링크는 ksp 마이그레이션 Android 공식 문서에서도 제공하고 있긴 했다. (예제 코드가 최신 버전이 아닐 줄은...)
프로젝트의 Kotlin 버전에 맞는 KSP 버전을 선택해야 합니다. KSP GitHub 페이지에서 출시 목록을 확인할 수 있습니다.)
여튼 들어가보니 글 작성 시점 현재 최신 버전은 2.0.20-1.0.24
였다.
그래서 프로젝트 수준 build.gradle.kts
를
plugins {
...
id("com.google.devtools.ksp") version "2.0.20-1.0.24" apply false
}
이렇게 버전을 바꿔주었더니 바로 해결됐다...
24.09.02 수정
공식문서의 내용을 잘 읽고, 잘 이해하자..
코드만 따라 치면서 사용하지 말고
이제까지 공식문서 예제 코드는 항상 업데이트가 된, 최신 상태일 것이라 믿어왔는데 그 믿음이 오늘 깨졌다...
아무리 공식 문서라도 업데이트가 안 되어 있을 수 있다는 것을 항상 생각하고 참고해야겠다..