Gradle에서 Java 버전을 설정하는 방법은 무엇인가요?
_____A:
- 소스 코드 문법 호환성 확보 (예: var, record 등)
- 컴파일 결과 바이너리의 실행 환경(target JVM) 보장
- CI/CD 파이프라인과 개발자 로컬 환경 일관성 유지
2. Q: 기본 Java 플러그인을 이용해 버전을 설정하려면 어떻게 하나요?
A: build.gradle(Groovy DSL) 또는 build.gradle.kts(Kotlin DSL)에 다음을 추가합니다.
Groovy DSL:
```groovy
plugins {
id 'java'
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
```
Kotlin DSL:
```kotlin
plugins {
java
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
```
3. Q: 소스와 타깃 버전을 따로 지정해야 하나요?
A:
- sourceCompatibility: 컴파일 시 사용할 소스 문법 버전
- targetCompatibility: 생성된 클래스 파일의 최소 실행 JVM 버전
둘을 같게 설정하는 것이 일반적이며, 호환성을 위해 필요에 따라 다르게 설정할 수 있습니다.
4. Q: Gradle Toolchains를 이용하면 무엇이 좋은가요?
A:
- 로컬에 설치된 JDK에 의존하지 않고 Gradle이 JDK를 자동 다운로드/관리
- 멀티 JDK 빌드를 손쉬운 구성
- CI 환경에서 JDK 버전 통일성 보장
5. Q: Toolchains를 사용해 Java 17을 설정하는 방법은?
A: build.gradle(Groovy DSL) 예시:
```groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
```
Kotlin DSL:
```kotlin
java {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
```
6. Q: 하위 프로젝트에 전역으로 Java 버전을 적용하려면?
A: settings.gradle 또는 루트 build.gradle에서 allprojects 또는 subprojects 블록 사용:
```groovy
subprojects {
apply plugin: 'java'
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
```
7. Q: 개별 컴파일 태스크에만 버전을 지정할 수 있나요?
A: 가능하며, compileJava 태스크에 직접 설정합니다.
```groovy
tasks.named('compileJava', JavaCompile) {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
```
8. Q: Gradle Wrapper와 Java 버전은 어떻게 연동되나요?
A:
- Gradle Wrapper(gradlew)는 Gradle 버전을 고정
- java.version 속성이나 toolchain이 선언된 JDK로 빌드
- wrapper에 JDK 버전 지정 옵션은 없으므로, wrapper 배포 시 README에 JDK 요구사항 명시
9. Q: 빌드 도중 “Unsupported class file major version” 에러 해결책은?
A:
- sourceCompatibility/targetCompatibility 버전이 낮아서 발생
- 필요한 버전(예: 17)으로 올리거나 toolchain에 해당 JDK 설치
- Gradle 데몬 재시작(`gradle --stop`) 후 재빌드
10. Q: 결론 및 대표 예제
A:
```
plugins {
id 'java'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
}
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
```
위 설정으로 소스/타깃 호환성과 자동 JDK 관리를 동시에 확보할 수 있습니다.
작성자:
이주은 [비회원]
| 작성일자: 1년 전
2025-01-01 07:51:47
조회수: 161 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 161 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.