Post

Gradle 데몬이 옛 환경변수를 들고 있을 때

환경변수 설정 전에 떠 있던 Gradle 데몬이 빈 토큰으로 의존성 해석을 실패시키는 진단/해결

Gradle 데몬이 옛 환경변수를 들고 있을 때

GITHUB_TOKEN을 분명히 설정해뒀는데 ./gradlewCould not resolve …:SNAPSHOT 으로 죽는다면, Gradle 데몬이 환경변수 설정 이전에 떠서 옛 환경(빈 토큰)을 그대로 들고 있을 가능성이 크다.

진단 단서

--refresh-dependencies 실행 시 첫 줄을 보자.

1
> Starting a Gradle Daemon, 3 stopped Daemons could not be reused, use --status for details

“could not be reused”가 떴다는 건 호환 안 되는 데몬이 여럿 살아 있었다는 뜻. 환경변수 mismatch도 그중 하나다.

해결 — 데몬 종료 후 새로 띄우기

1
2
.\gradlew.bat --stop
.\gradlew.bat --refresh-dependencies <task>

새 데몬은 현재 셸의 환경변수를 그대로 상속받기 때문에 토큰이 정상적으로 전달된다.

IntelliJ도 같은 패턴

IntelliJ가 환경변수 설정 이전에 떠 있으면, 그 IDE 프로세스가 자식으로 띄우는 Gradle 데몬도 옛 환경을 물려받는다. --stop만으로 부족하면:

  1. IntelliJ를 트레이까지 완전 종료
  2. 시작 메뉴/작업표시줄로 재실행 (User-scope 환경변수 자동 상속)
  3. Gradle tool window → Reload All Gradle Projects

빠른 자가진단 흐름

원격 저장소 → 로컬 셸 → 데몬 → IDE 순으로 분리해서 본다.

체크명령OK 신호
원격 정상curl -u $env:GITHUB_ACTOR:$env:GITHUB_TOKEN <pkg-url>HTTP 200
셸 정상.\gradlew.bat dependenciesresolve 성공
데몬 정상데몬 재기동 후 동일 명령동일
IDE 정상IntelliJ 재시작 후 Sync의존성 트리에 SNAPSHOT 표시

원격은 200인데 IDE만 실패 → 거의 데몬/IDE의 stale env 문제.

영구 대안

데몬 재시작 의존을 끊고 싶다면 자격증명을 ~/.gradle/gradle.properties로 옮긴다. build.gradle에서 findProperty() 폴백 추가:

1
2
3
4
credentials {
    username = project.findProperty("gprUsername") ?: System.getenv("GITHUB_ACTOR")
    password = project.findProperty("gprToken")    ?: System.getenv("GITHUB_TOKEN")
}

이러면 환경변수가 비어 있어도 빌드는 통과한다. (단, gradle.properties는 절대 커밋 금지)

This post is licensed under CC BY 4.0 by the author.