포스트

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

Claude Code 같은 AI 에이전트 셸도 같은 패턴

Claude Code 세션은 시작 시점의 환경변수를 캡처한다. 세션을 띄운 뒤 토큰을 갱신해도 세션 안에선 옛값이라, 같은 검증 명령이 셸에 따라 갈린다.

1
2
3
4
5
6
7
# 사용자 셸 (갱신된 토큰)
curl -i -u "$GITHUB_ACTOR:$GITHUB_TOKEN" https://api.github.com/user | head -1
# HTTP/2 200 ✓

# Claude 세션 안 (캡처된 옛 토큰)
curl -i -u "$GITHUB_ACTOR:$GITHUB_TOKEN" https://api.github.com/user | head -1
# HTTP/2 401 ✗
  • 새 터미널에서 에이전트를 재실행해 새 env를 캡처
  • 또는 ! prefix로 사용자 셸 권한으로 명령 실행
  • 또는 사용자가 직접 실행한 결과만 전달

데몬·IDE·에이전트 모두 “환경변수 설정 이전에 뜬 프로세스가 옛 env를 들고 있다”는 동일 함정이다.

빠른 자가진단 흐름

원격 저장소 → 로컬 셸 → 데몬 → 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는 절대 커밋 금지)

GitHub Packages 트러블슈팅 시리즈

다루는 것
SNAPSHOT 의존성 해석 실패 — 불완전 배포pom 누락으로 404, 재배포로 해결
GitHub Packages 인증 실패 — 401/403 디버깅PAT 스코프·SSO authorize·환경변수 전달까지
Gradle 데몬 환경변수 stale 문제 (현재 글)데몬이 옛 환경변수를 잡고 있어 PAT 갱신이 반영되지 않는 함정
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.