Java

[Gradle] 프로젝트 빌드 시 JAVA_HOME 대신 프로젝트 전용 JDK 버전 사용하기

eugene9 2026. 7. 9. 15:04

프로젝트를 여러 개 동시에 돌리다 보면 필히 버전 의존성 문제를 마주치게 된다.

나는 Gradle로 빌드하고자 하는 프로젝트가 Java 11 바이트코드로 빌드된 caffeine 3.1.8 라이브러리를 사용하고 있어 JDK 11 버전이 필요했는데, JAVA_HOME을 JDK 8버전(Azul Zulu)으로 세팅해두어서 8 버전으로 실행된 Gradle의 kapt가 해당 라이브러리를 읽지 못하며 빌드에 실패했다.

 

프로젝트별 JDK 버전 의존성 관리법

그렇다면 이 프로젝트를 빌드하기 위해서는 어떻게 하면 될까? JAVA_HOME에 저장된 JDK를 다시 11 버전으로 변경해야 할까?

물론 그렇게 해도 되겠지만 서로 다른 JDK 버전을 사용하는 여러 개의 프로젝트를 동시에 빌드해야 하는 경우에는 한계가 있다.

이러한 버전 의존성 문제를 프로젝트 별로 분리해서 관리할 수 있도록 gradle.properties에서는 아래의 속성을 지원한다.

org.gradle.java.home=C:\\Program Files\\Java\\jdk-11

터미널에서 `./gradlew clean compileKotlin` 실행 시, Gradle은 기본적으로 시스템 환경변수 JAVA_HOME에 저장된 경로를 참조한다. 하지만 gradle.properties에 위 속성이 정의되어 있으면 해당 속성에 명시된 경로를 우선적으로 참조하게 된다.

참고로 properties 파일에서 `\`는 이스케이프 문자로 취급되므로, 하위 디렉토리 경로를 나타낼 때는 위에서 명시해둔 예시 코드와 같이 `\\` 형태로 두 번 작성해주어야 한다.

 

예외 케이스

그런데 만약 이미 JAVA_HOME 경로로 최초 빌드를 시도한 탓에 에러 로그를 구경하게 된 상황이라면, 기존에 떠 있는 Gradle 데몬이 JDK 8로 계속 실행되고 있을 것이므로 gradle.properties 설정 변경사항이 제대로 반영되지 않을 수 있다.

이런 경우에는 터미널에서 `./gradle --stop` 명령어를 통해 Gradle 데몬을 종료시켜서 JDK 11로 새출발을 할 수 있도록 독려해주면 되겠다. 잘 모르겠으면 무적의 치트키인 컴퓨터 리부팅을 해도 좋다.

추가로 IntelliJ를 사용하고 있다면 아래 이미지를 참고해서 Settings > Build > Build Toos > Gradle > Gradle JVM도 다시 확인해보자. 실패한 빌드 상태를 캐싱하고 있어서 Gradle 설정 변경 사항이 동기화되지 않았을 수 있다.

JAVA_HOME으로 잡혀있는 것을 11 버전으로 직접 변경해주자.

만약 컴파일된 클래스가 실제로 존재하는데도 IntelliJ에서 캐시를 잡고 있어 인식을 못하고 있다면, File > Invalidate Caches > Invalidate and Restart를 통해 캐시 무효화 후 재시작하여 인덱싱을 다시 시도하자.