일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AWS
- Hilt
- Kotlin
- 코드포스
- relay
- TEST
- Compose
- ProGuard
- 백준
- textfield
- Codeforces
- android
- activity
- 코루틴
- 암호학
- MyVoca
- androidStudio
- Rxjava
- livedata
- 쿠링
- MiTweet
- boj
- 프로그래머스
- Python
- pandas
- architecture
- Gradle
- Coroutines
- GitHub
- Coroutine
- Today
- Total
이동식 저장소
sourceCompatibility vs. targetCompatibility 본문
App level ``build.gradle`` 파일에는 ``sourceCompatibility``와 ``targetCompatibility``라는 속성이 정의되어 있다.
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
이 속성들이 무엇을 의미하는지 공부해 보자.
sourceCompatibility
코드를 컴파일할 때 사용할 Java 버전을 의미한다. 예를 들어 ``sourceCompatibility``를 1.8로 설정하면, Java 1.8 이후 버전의 기능은 사용할 수 없다. 소스 코드에서 사용할 Java 버전이라고 기억해도 좋다.
targetCompatibility
만들어진 바이트코드가 실행될 수 있는 JVM 버전의 최솟값을 의미한다. ``targetCompatibility``가 1.8이라면 컴파일된 바이트코드는 JVM 1.8 이상 버전에서만 실행될 수 있다.
반드시 같아야 하는가?
그럴 필요는 없다. 코드에서 사용 가능한 기능과 바이트코드의 버전 사이에는 딱히 상관관계가 없기 때문이다. ``sourceCompatibility``를 1.8로, ``targetCompatibility``를 11로 설정할 수도 있다. 이렇게 하면 코드에서는 Java 1.8까지의 기능만을 사용할 수 있고, 만들어진 바이트코드는 JVM 11 이상에서만 실행될 수 있다.
조금 이상한 설정이긴 하다. 1.8의 기능만을 사용하여 컴파일된 바이트코드를 정작 JVM 1.8에서 실행할 수 없다는 뜻이니까. 하지만 불가능한 설정은 아니다.
하지만 ``sourceCompatibility``가 ``targetCompatibility``보다 높을 수는 없다. 상식적으로 Java 11을 기반으로 컴파일된 바이트코드를 JVM 1.8에서 실행할 수는 없지 않겠는가?
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_1_8
}
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> warning: source release 11 requires target release 11
JDK 버전과 반드시 같아야 하는가?
그럴 필요는 없다. JDK 버전보다 같거나 작은 값을 사용하면 된다. 왜 이게 가능한지는 글을 충분히 읽었다면 알 것이라 생각한다.
참고문헌
'Secondary > Gradle' 카테고리의 다른 글
클래스 충돌 에러가 날 때는 (0) | 2023.04.26 |
---|---|
Kotlin jvmTarget (0) | 2023.03.25 |
[Gradle] Version Catalog로 라이브러리 관리하기 (0) | 2022.11.19 |
[Android] Gradle 테스트 실행 커맨드 (0) | 2022.10.05 |
[Android] gradle vs. gradlew (0) | 2022.09.23 |