[ClimbUp๐ง] jvm target compatibility should be set to the same Java version. ์๋ฌ ํด๊ฒฐ
ํ๋ก์ ํธ์์ 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๋ฒ์ ์ค์ ์ ์๋์ ๋ ๊ฐ์ด๋ค.
- Project Structure>SDK Location>JDK Location
- ์ด ํ๋ฉด์์๋ ์๋๋ก์ด๋ ์คํ๋์ค๊ฐ ์ฑ์ ์ ์ ๊ณผ์ ์์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋๋ JDK๋ฒ์ ์ ๊ฒฐ์ ํ๋ค.
- build.gradle(:app)์ compileOptions
- ์ฌ๊ธฐ์๋ ํ๋ก์ ํธ์ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋๋ฐ ์ฌ์ฉํ๋ JDK๋ฒ์ ์ ์ง์ ํ๋ค.
- sourceCompativility : ์ฌ์ฉ๋๋ JDK๋ฒ์ ์ง์
- targetCompativility : ์์ฑ๋๋ ByteCode์ ๋์ JDK๋ฒ์ ์ ์ง์
- kotlinOptions - jvmTarget : kotlin์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉํ๋ JVMTarget์ค์
- Project Structure>SDK Location>JDK Location
+) 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
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, ๊ฐ๋น์ง ์ฝ๋ ํฐโฆ)
๋๊ธ๋จ๊ธฐ๊ธฐ