KSP? KAPT? annotationProcessor?
증상:
- Room tutorial 수행 중 kapt? ksp? 의존성을 추가하는 부분이 있었고 적용하였더니 빌드 에러가 발생했다
- 어떤 함수를 찾지 못하는 문제
- java.lang.NoSuchMethodError: 'void org.jetbrains.kotlin.incremental.IncrementalCompilationContext.<init>(org.jetbrains.kotlin.incremental.storage.FileToPathConverter, org.jetbrains.kotlin.incremental.storage.FileToPathConverter, boolean, org.jetbrains.kotlin.incremental.CompilationTransaction, org.jetbrains.kotlin.build.report.ICReporter, boolean, boolean, boolean, int, kotlin.jvm.internal.DefaultConstructorMarker)'
- Impl 클래스가 없다고 하는 문제
- Android room persistent: AppDatabase_Impl does not exist
- 그래서 KSP 가 뭔지 구글링 하다 보니 kapt 에서 ksp 로 mirgration 하는 문서가 있었다 (kapt 는 ksp 의 전신이며 ksp 가 kapt 보다 빌드 속도가 많이 개선되었다고 함)
- kapt 는 또 뭔가 해서 찾아보았더니 그전에 사용되던 annotationProcessor 가 바뀐거란다 (참고: https://3edc.tistory.com/65)
- 원하는 설명은 찾기 어렵고 후신의 플러그인들만 검색되는 상태
해결법:
- Kapt (the Kotlin Annotation Processing Tool) 는 Kotlin 에서 Java annotation 을 사용할 수 있도록 해준다
- KSP (Kotlin Symbol Processing) 는 kapt 대체제로 kapt 보다 최대 2배 빠르다고 한다
- 주의 사항: kotlin 버전과 ksp 버전을 맞춰줘야 한다
- 예를 들어 kotlin 버전이 1.9.23 이면 ksp 버전은 1.9.23-1.0.20 식으로 kotlin 버전이 포함된 범위를 설정해 줘야 한다
- Sunflower: Room + compose + ksp 가 적용된 샘플 코드 (구글 공식)
댓글 없음:
댓글 쓰기