ํ”„๋กœ์ ํŠธ์—์„œ DB๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ Room์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•ด์„œ gradle์— ๊ด€๋ จ ์„ค์ •์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ž๊พธ ๋นŒ๋“œ๊ฐ€ ์•ˆ๋˜๋Š” ๊ฑฐ๋‹ค!๐Ÿ˜ก

๊ทผ๋ฐ ์ „์— Room์„ ์—ฐ์Šตํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ์—†์—ˆ์–ด์„œ ๋” ๋‹นํ™ฉ์Šค๋Ÿฌ์› ๋‹ค.๐Ÿ˜ฑ

โ—๏ธ์—๋Ÿฌ ์ฝ”๋“œ

//build.gralde:module

kapt "androidx.room:room-compiler:$room_version"

Execution failed for task โ€˜:app:kaptGenerateStubsDebugKotlinโ€™. โ€˜compileDebugJavaWithJavacโ€™ task (current target is 1.8) and โ€˜kaptGenerateStubsDebugKotlinโ€™ task (current target is 17) jvm target compatibility should be set to the same Java version. Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain

์ฒ˜์Œ์—๋Š” KSP๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ KSP๊ฐ€ ๋ฌธ์ œ์ธ๊ฐ€ ์‹ถ์–ด kapt๋กœ ๋ฐ”๊ฟ”๋ณด์•˜๋Š”๋ฐ ๊ทธ๋ž˜๋„ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ KSP๋‚˜ kapt์˜ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๊ฒ ๊ฑฐ๋‹ˆ ์‹ถ์—ˆ๋‹ค.

์ € ์˜ค๋ฅ˜ ๋ฌธ๊ตฌ๋ฅผ ์ฝ์–ด ๋ณด๋Š”๋ฐ JVM current target์ด ํ•˜๋‚˜๋Š” 1.8์ด๋ผ ๊ทธ๋Ÿฌ๊ณ  ํ•˜๋‚˜๋Š” 17์ด๋ผ ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ฌด์Šจ ์†Œ๋ฆฌ๋ฅผ ํ•˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋์—ˆ๋‹ค.

์•„๋ž˜๋Š” ์œ„ ์—๋Ÿฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์กฐ์‚ฌํ•œ ๊ฒƒ๋“ค์ด๋‹ค.

๐Ÿ“š์‚ฌ์ „ ์ง€์‹

kapt(Kotlin Annotation Porcessing Tool)

  • https://kotlinlang.org/docs/kapt.html
  • ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ์—์„œ ์ž๋ฐ” ์ฃผ์„ ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

KSP(Kotlin Symbol Processing)

  • kapt ๋Œ€์•ˆ
  • kapt๋ณด๋‹ค ๋น ๋ฆ„
  • kotlin ์–ธ์–ด ๊ตฌ์„ฑ์„ ๋” ์ž˜ ์ดํ•ดํ•จ

JVM(Java Virtual Machine)

  • ์ž๋ฐ”๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ
  • java์ฝ”๋“œ(.java) โ†’(์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ)โ†’Java bytecode(.class)โ†’(JVM)โ†’๊ธฐ๊ณ„์–ด
  • JVM๋•๋ถ„์— ์ž๋ฐ”๋Š” OS์— ์ข…์† ๋ฐ›์ง€ ์•Š์Œ
  • +) JVM์€ JDK์— ํฌํ•จ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ JDK๋ฒ„์ „์—๋”ฐ๋ผ JVM๋ฒ„์ „๋„ ๋‹ฌ๋ผ์ง„๋‹ค.

JVM toolchain

  • JDK์— ํฌํ•จ๋œ ์ž๋ฐ” ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ ์„ธํŠธ
  • Java์ปดํŒŒ์ผ๋Ÿฌ, JRE(Java Runtime Environment), Java class ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ
  • ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” JVM Toolchain์„ ์‚ฌ์šฉํ•ด ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๋ฅผ Java ByteCode๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.

์—๋Ÿฌ์— JVM current target์ด ์™œ 2๊ฐœ ์ฐํ˜€์žˆ๋‚˜?(1.8 ,17)

  • ์•ˆ๋“œ๋กœ์ด๋“œ์•ฑ์„ ๋งŒ๋“ค๋•Œ Gradle๊ณผ Adnrodi Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Android์ŠคํŠœ๋””์˜ค๋ž‘ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ Gradle๊ณผ Adroid Gradleํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ฐ๊ฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค
  • ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ์ ‘ํ•˜๋Š” JDK๋ฒ„์ „ ์„ค์ •์€ ์•„๋ž˜์˜ ๋‘ ๊ฐœ์ด๋‹ค.
    1. Project Structure>SDK Location>JDK Location
      • ์ด ํ™”๋ฉด์—์„œ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์•ฑ์„ ์ œ์ž‘ ๊ณผ์ •์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” JDK๋ฒ„์ „์„ ๊ฒฐ์ •ํ•œ๋‹ค.

    2. build.gradle(:app)์˜ compileOptions
      • ์—ฌ๊ธฐ์„œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” JDK๋ฒ„์ „์„ ์ง€์ •ํ•œ๋‹ค.
      • sourceCompativility : ์‚ฌ์šฉ๋˜๋Š” JDK๋ฒ„์ „ ์ง€์ •
      • targetCompativility : ์ƒ์„ฑ๋˜๋Š” ByteCode์˜ ๋Œ€์ƒ JDK๋ฒ„์ „์„ ์ง€์ •
      • kotlinOptions - jvmTarget : kotlin์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” JVMTarget์„ค์ •

+) java 1.8์€ ์™œ ํ˜ผ์ž 1.์ด ๋ถ™๋‚˜

์›๋ž˜ ์ž๋ฐ” 1.x๋กœ ํ‘œ๊ธฐ๋˜๋‹ค๊ฐ€ 1.8๋ถ€ํ„ฐ 1.์„ ์ƒ๋žตํ•˜์—ฌ ํ‘œ๊ธฐํ•˜๊ธฐ ์‹œ์ž‘ํ•จ

๋”ฐ๋ผ์„œ java 1.8์€ java8๊ณผ ๋™์ผํ•˜๋‹ค

๐Ÿค”์›์ธ

์œ„์—์„œ ๋‘ ๊ฐ€์ง€ JVM๋ฒ„์ „์ด ๋‹ค๋ฅธ ๋ชฉ์ ์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์•˜๋‹ค.

๋‘˜์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ์„ค์ •ํ–ˆ์„ ๋•Œ ์ œ์ž‘๊ณผ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•ด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ์ ์—์„œ ๋ฏธ๋ฃจ์–ด๋ณผ ๋•Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” JDK17๋กœ ๋งŒ๋“ค๊ณ  ์ปดํŒŒ์ผ์€ 8๋กœ ํ•˜๋‹ˆ๊นŒ ์ด ๋…€์„์ด ๊ต‰์žฅํžˆ ํ™”๊ฐ€ ๋‚˜์„œ ๋นจ๊ฐ„ ๊ธ€์ž ํญํƒ„์„ ๋ฟœ์–ด๋ฒ„๋ฆฐ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค๐Ÿ˜ต

โœ…ํ•ด๊ฒฐ

ํ•ด๊ฒฐ1) JDK ๋ฒ„์ „ ๋งž์ถฐ์ฃผ๊ธฐ

JDK๋ฒ„์ „์„ 17๋กœ ๋งž์ถฐ์ฃผ์—ˆ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค.

compileOptions {
        sourceCompatibility JavaVersion.VERSION_17//VERSION_1_8
        targetCompatibility JavaVersion.VERSION_17//VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()//'1.8'

JDK 8๋กœ ๋งž์ถ”๋ฉด ์•ˆ๋˜๋‚˜ ์‹ถ์–ด์„œ 8๋กœ ๋งž์ถฐ๋ณด๋‹ˆ ์•„๋ž˜ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์™”๋‹ค.

Could not resolve all files for configuration โ€˜:classpathโ€™. Could not resolve com.android.tools.build:gradle:8.0.1. Required by: project : > com.android.application:com.android.application.gradle.plugin:8.0.1 project : > com.android.library:com.android.library.gradle.plugin:8.0.1 > No matching variant of com.android.tools.build:gradle:8.0.1 was found. The consumer was configured to find a library for use during runtime, compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute โ€˜org.gradle.plugin.api-versionโ€™ with value โ€˜8.0โ€™ but: โ€ฆ ์ดํ•˜์ƒ๋žต

์ด์œ ๋Š” gradle๋ฒ„์ „์— ๋”ฐ๋ผ ์š”๊ตฌํ•˜๋Š” JDK ๋ฒ„์ „์ด ์ƒ์ดํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

gradle๋ฒ„์ „์— ๋”ฐ๋ฅธ JDK ๋ฒ„์ „์€ ๋ฌธ์„œ์— ๋‚˜์™€์žˆ์œผ๋‹ˆ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ์ง€์›ํ•˜๋Š” ๋ฒ„์ „์— JDK๋ฒ„์ „์„ ๋งž์ถฐ์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์ฐธ๊ณ ๋กœ gradle 7.4.0-alpha9๋ถ€ํ„ฐ ์ž๋ฐ” 11์„ ํƒ€๊ฒŸํŒ…ํ•˜๋ฏ€๋กœ 1.8์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. (ํ™•์ธํ•ด๋ดค๋Š”๋ฐ 11์€ ์“ธ ์ˆ˜ ์žˆ์—ˆ๋‹ค)

ํ•ด๊ฒฐ2 ) ํˆด์ฒด์ธ ๋ช…์‹œ(AGP 8.1.0-alpha09 ์ด์ƒ๋ถ€ํ„ฐ ๊ฐ€๋Šฅ)

์ด๊ฑฐ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ์žˆ๋Š” ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€์ถฉ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด ์ฝ”ํ‹€๋ฆฐ์„ ์ž๋ฐ” ByteCode๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” JVM ToolChain์„ ์‚ฌ์šฉํ•ด ์†Œ์Šค ์ฝ”๋“œโ†’์ž๋ฐ” ByteCode๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์œ„๋ž‘ ๊ฐ™์€ ์ด์œ ๋กœ ์ปดํŒŒ์ผ ํ•  ๋•Œ JDK๋ฒ„์ „์ด ์•ˆ ๋งž์•„์„œ ๋ชปํ•˜๋‹ˆ๊นŒ Toolchain๋ฒ„์ „์„ ๋”ฐ๋กœ ๋ช…์‹œํ•ด์„œ ์ปดํŒŒ์ผ์— ์‚ฌ์šฉ JDK๋ฒ„์ „์„ ๋งž์ถ”์ž๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

// if Android
kotlin {
    jvmToolchain(17)
/* ์ด๋ ‡๊ฒŒ๋„ ๊ฐ€๋Šฅ!
		jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
    }
*/
}

android {
    ...
    kotlinOptions {
        // Don't need to add jvmTarget
    }
    ...
}

AGP 8.1.0 ์–ด์ฉŒ๊ตฌ ๋ถ€ํ„ฐ ์ง€์›๋œ๋‹ค๊ณ  ํ•˜๊ธธ๋ž˜ ๊ถ๊ธˆํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ € ๋ฒ„์ „์„ ๋ชป ์ฐพ์•˜๋‹ค..

์–ด์จŒ๋“  ์ด ๋ฒ„์ „ ์ดํ•˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์œ„์˜ 1๋ฒˆ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.


์ฐธ๊ณ 

kapt์—์„œ KSP๋กœ ์ด์ „ ย |ย  Android ๊ฐœ๋ฐœ์ž ย |ย  Android Developers

[android] Task :app:compileDebugJavaWithJavac FAILED ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

Configure a Gradle project | Kotlin

[Gradle] Kotlin Java toolchains(ํˆด์ฒด์ธ) ๊ด€๋ จ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•, with AGP 8.1

GradleException: โ€˜compileDebugJavaWithJavacโ€™ task (current target is 1.8) and โ€˜kaptGenerateStubsDebugKotlinโ€™ task (current target is 17 )

CompileOptions ย |ย  Android Developers

Android Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถœ์‹œ ๋…ธํŠธ ย |ย  Android ๊ฐœ๋ฐœ์ž ย |ย  Android Developers

[Android, Kotlin] Gradle / build.gradle(project)์™€ build.gradle(module) ์ฐจ์ด

๋นŒ๋“œ ๊ตฌ์„ฑ ย |ย  Android ๊ฐœ๋ฐœ์ž ย |ย  Android Developers

KAPT๋ณด๋‹ค 2๋ฐฐ ๋” ๋น ๋ฅด๊ฒŒ, ์ฝ”ํ‹€๋ฆฐ์„ ์œ„ํ•œ KSP | ์ฐฐ์Šค์˜ ์•ˆ๋“œ๋กœ์ด๋“œ

[JAVA] JVM์ด๋ž€? ๊ฐœ๋… ๋ฐ ๊ตฌ์กฐ (JDK, JRE, JIT, ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐโ€ฆ)

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ