gradle이 종속성을 다시 다운로드하도록하려면 어떻게해야합니까?


740

리포지토리에서 종속성을 다시 다운로드하도록 gradle에 지시하는 방법은 무엇입니까?

답변:


845

일반적으로 명령 줄 옵션 --refresh-dependencies 를 사용하여 캐시의 종속성을 새로 고칠 수 있습니다 . 에서 캐시 된 파일을 삭제할 수도 있습니다 ~/.gradle/caches. 다음 빌드에서 Gradle은 다시 다운로드를 시도합니다.

특정 사용 사례는 무엇입니까? 동적 종속성 버전 또는 SNAPSHOT 버전을 사용합니까?


Unix 시스템에서 Gradle이 다음을 사용하여 다운로드 한 모든 기존 아티팩트 (아티팩트 및 메타 데이터)를 삭제할 수 있습니다.

rm -rf $HOME/.gradle/caches/

27
OP를 말할 수는 없지만 특정 사용 사례는 MavenCentral 이외의 저장소 구성이 실제로 작동하는지 테스트하는 것입니다.
Emil Lundberg

7
~ / .m2 디렉토리 (있는 경우)도 제거해야합니다. maven repo를 구성한 경우 이러한 아티팩트 중 일부도 ~ / .m2로 다운로드됩니다. 깨끗한 슬레이트에서 시작하려면 ~ / .gradle과 ~ / .m2를 모두 제거하는 것이 좋습니다.
Gopinath MR

17
Maven Local은 빌드에서 저장소로 정의한 경우에만 관련이 있습니다.
Benjamin Muschko

21
.m2에는 maven 설정 파일이 포함될 수 있으므로 @Gopinath는 위험한 조언입니다. 나는 당신이 .m2 / repository를 삭제하는 것을 의미한다고 생각합니다
Ward

9
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
fangzhzh

708

최신 버전의 Gradle을 사용하는 경우 --refresh-dependencies 옵션을 사용할 수 있습니다.

./gradlew build --refresh-dependencies

Gradle 매뉴얼을 참조하십시오 .

--refresh-dependencies 옵션은 Gradle에게 해결 된 모듈 및 아티팩트에 대한 모든 캐시 된 항목을 무시하도록 지시합니다. 동적 버전이 다시 계산되고 모듈이 새로 고쳐지고 아티팩트가 다운로드 된 모든 구성된 리포지토리에 대해 새로운 해결이 수행됩니다.


10
gradle이 모든 종속 파일을 다운로드하려고 시도하기 때문에 시간이 오래 걸립니다.
나가

11
이것이 항상 작동하지는 않습니다. 지난 밤 늦게 새 버전을 배포했을 때 3 일이 지난 캐시 된 jar로 "gradle clear war --refresh-dependencies"실행을 테스트했습니다. 새 코드에 추가 된 누락 된 종속성으로 인해 빌드가 중단되었습니다. 나는 아직도 캐시에 3 일 된 항아리를 가지고있었습니다. .m2 캐시에서 버전 폴더를 삭제하고 다시 작성했습니다. 기본적으로 선택의 여지가 없었기 때문에 최신 버전을 얻었습니다!
Spanky Quigman

10
더 나은 아직 ./gradlew --refresh-dependencies
headsvk

1
이것은 Android Studio 터미널에서 './gradlew build --refresh-dependencies'로 훌륭하게 작동했습니다. 감사!
the_dude_abides

2
IDE 내부에서 빌드 할 때 Android Studio 가이 작업을 수행 할 수있는 방법이 있습니까?
karl

313

종속성을 '변경'으로 플래그 지정하여 빌드 스크립트에서 일부 종속성을 다시 다운로드하도록 Gradle에 지시 할 수 있습니다. 그런 다음 Gradle은 24 시간마다 업데이트를 확인하지만 resolutionStrategy DSL을 사용하여 구성 할 수 있습니다. SNAPSHOT 또는 NIGHTLY 빌드에 이것을 사용하는 것이 유용하다는 것을 알았습니다.

configurations.all {
    // Check for updates every build
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

넓히는:

dependencies {
    implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}

응축 :

implementation('group:projectA:1.1-SNAPSHOT') { changing = true }

포럼 스레드 에서이 솔루션을 찾았습니다 .


4
동일한 라이브러리의 소스에서 이것이 어떻게 작동하는지 알고 있습니까? 현재 컴파일 된 라이브러리는 변경 될 때마다 다운로드되지만 소스는 그렇지 않습니다.
Markus Wüstenberg

2
스냅 샷 버전은 정의에 따라 "변경"됩니다. Gradle은 의존성 선언에서 실제로 이것을 정의 할 필요가 없다는 것을 알고 있습니다.
Benjamin Muschko

4
고마워 FWIW의 의존성은 스냅 샷 버전에 있었으며,이를 수행 할 때까지 모든 빌드에서 업데이트를 확인하지 않았습니다.
sfitts

10
cacheChangingModulesForchanging: true의해 암시되기 때문에 선택 사항 입니다. 위의 함의 때문에 -SNAPSHOT여기에서 속기를 사용할 수 있습니다 compile 'group:projectA:1.1-SNAPSHOT'. resolutionStrategy를 하나의 구성으로 제한 할 수도 있습니다 configurations.compile.resolutionS....
TWiStErRob

2
@Umi 요약 버전이 있습니까? 같은 compile 'com.burrowsapps:ads:1.0:true'?
Jared Burrows

63

MAC의 경우

./gradlew build --refresh-dependencies

Windows의 경우

gradlew build --refresh-dependencies

시도해 볼 수도 있습니다 gradlew assembleDevelopmentDebug --refresh-dependencies


2
Android는 일반 gradle을 사용합니다. 그냥 플러그인입니다.
Dragas 2019

Gradle 래퍼는 Android 전용이 아닙니다. gradle wrapper태스크를 사용하여 생성 할 수 있습니다 . 다른 Gradle 래퍼를 사용하여 래퍼를 생성 할 수도 있습니다.gradlew wrapper
Salvioner

28

Windows의 경우 ... gradle을 다시 다운로드하여 특정 종속성 을 만들려면

  1. 아래 디렉토리에서 다시 다운로드하려는 종속성을 삭제하십시오.

    C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
    
  2. 경로에서 모든 메타 데이터 디렉토리를 삭제하십시오 .

    C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
    
  3. 프로젝트의 루트 디렉토리에서 실행하십시오 gradle build(또는 gradlew buildgradle wrapper를 사용하는 경우).

참고 : 위 파일 경로의 숫자는 다를 수 있습니다.


19

캐시 된 항아리가있는 폴더를 제거 할 수 있습니다.

제 경우에는 Mac 에서 라이브러리가 경로에 캐시되었습니다.

/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove

캐시 된 라이브러리 폴더 (위의 예제에서 "cached-library-to-remove")를 제거하고 프로젝트의 빌드 폴더를 삭제하고 다시 컴파일했습니다. 신선한 도서관은 그때 다운로드되었습니다.


16

여기에 제시된 답변과 같이 전체 gradle 캐시를 제거하는 대신 특정 그룹 또는 이슈 ID에 대한 캐시를 삭제할 수 있습니다. 내 기능에 다음 기능을 추가했습니다 .bash_profile.

deleteGradleCache() {
  local id=$1
  if [ -z "$id" ]; then
    echo "Please provide an group or artifact id to delete"
    return 1
  fi
  find ~/.gradle/caches/ -type d -name "$id" -prune -exec rm -rf "{}" \; -print
}

용법:

$ deleteGradleCache com.android.support

그런 다음 다음 빌드 또는 재 동기화하면 gradle이 종속성을 다시 다운로드합니다.


9

이를 수행하는 두 가지 방법이 있습니다.

  1. 명령 행 옵션을 사용하여 의존성 현금을 새로 고칩니다.
  2. Gradle을 통해 artefast가 캐시 인 로컬 캐시를 삭제하고 빌드를 트리거 할 수 있습니다.

사용 --refresh-종속성 옵션 :

./gradlew build --refresh-dependencies

간단한 설명 --refresh-dependencies 옵션은 Gradle에게 해결 된 모듈 및 아티팩트에 대한 모든 캐시 된 항목을 무시하도록 지시합니다.

긴 설명

  • –refresh-dependencies '와 함께 Gradle은 항상 원격 서버에 충돌하여 업데이트 된 아티팩트를 확인합니다. 그러나 Gradle은 캐시에 동일한 파일이 이미 존재하는 파일을 다운로드하지 않습니다.
    • 첫 번째 Gradle은 HEAD 요청을하고 서버가 마지막 시간 이후로 파일을 변경되지 않은 것으로보고하는지 확인합니다 ( 'content-length'및 'last-modified'가 변경되지 않은 경우). 이 경우 "캐시 된 리소스가 최신 상태입니다 (lastModified : {})"라는 메시지가 나타납니다.
    • 다음 Gradle은 가능한 경우 HEAD 요청 또는 '.sha1'파일을 다운로드하여 원격 체크섬을 결정합니다.이 체크섬이 이미 다운로드 한 다른 파일 (저장소에서)과 일치하는 경우 Gradle은 해당 파일을 다시 다운로드하지 않고 캐시. 이 경우 "“체크섬이 일치하는 로컬에서 사용 가능한 리소스를 찾았습니다 : [{}, {}]".

삭제 사용 : 캐시를 삭제할 때

rm -rf $HOME/.gradle/caches/

캐시 된 항아리와 sha1 합계를 모두 청소하면 Gradle이 컴퓨터에 아티팩트가 없으며 모든 것을 다운로드 해야하는 상황에 있습니다. 예, 처음으로 100 % 작동하지만 다른 SNAPSHOT이 릴리스되고 종속성 트리의 일부인 경우 캐시를 새로 고치거나 제거하기 위해 다시 선택할 수 있습니다.


9

이것은 나를 위해 일했습니다. File> Settings> Gradle> Offline Work에서 버튼을 선택 해제하여 Gradle이 오프라인으로 설정되어 있지 않은지 확인하십시오.

이것을 build.gradle의 최상위 레벨에 추가하십시오.

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

내 의존성이 다음과 같이 작성되었는지 확인했습니다.

implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
    changing = true
}

그런 다음 Android Studio에서 Gradle 패널을 열고 파란색 원 화살표 버튼을 클릭하십시오. 항상 업데이트가 새로운 사본을 얻는 것을 볼 수 있습니다.


9

위의 해결책 중 어느 것도 나를 위해 일하지 않았습니다.

IntelliJ를 사용하는 경우 해결 한 것은 모든 Gradle 프로젝트를 새로 고치는 것입니다.

여기에 이미지 설명을 입력하십시오


7

gradle 명령을 어디에서 실행할지 궁금한 사람들을 위해 :

  1. 안드로이드 스튜디오 열기
  2. 터미널을 클릭하십시오 (Android Studio 기반에서 찾을 수 있습니다)
  3. 명령 도구가 열립니다
  4. 명령을 입력하십시오 gradlew build --refresh-dependencies

6

Android Studio 3.4.1의 경우

gradle 탭을 열고 (오른쪽에 위치 할 수 있음) 목록에서 부모를 마우스 오른쪽 단추로 클릭하고 ( "Android"라고 함) "종속성 새로 고침"을 선택하십시오.

문제가 해결 될 것입니다.


4

Mb 너무 늦었지만 솔루션은 단일 리포지토리입니다. ~ / .gradle / *를 삭제하는 것이 과도하다고 생각합니다. 내가 부딪친 문제는 소스가있는 디렉토리를 삭제하고 gradle이 넥서스가 아닌 다른 버전을 얻고 있다는 것입니다. 다음을 실행하지 않으려면 다음을 수행하십시오.

~/.gradle$ find . -type d -name 'group.plugins.awssdk'
./caches/modules-2/files-2.1/group.plugins.awssdk
./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk

~/.gradle$ rm -r ./caches/modules-2/files-2.1/group.plugins.awssdk   ./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk

그 gradle은 nexus에서 파일을 드래그합니다.


2

캐시 된 '릴리스'버전을 새로 고치려면 로컬 캐시를 지우는 것이 유일한 옵션입니다.

rm -rf $HOME/.gradle/caches/

캐시 된 '스냅 샷'버전을 새로 고치려면 다음을 수행하십시오.

./gradlew build --refresh-dependencies

1

모든 캐시를 삭제하면 모든 종속성이 다시 다운로드됩니다. 너무 오래 걸리고 모든 의존성을 다시 다운로드하기 위해 다시 기다리는 것은 지루합니다.

어떻게하면이 방법을 아래에서 해결할 수 있었습니까?

새로 고쳐야하는 그룹을 삭제하십시오.

예 : com.user.test 그룹 을 새로 고치 려면

rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/

그런 다음 build.gradle에서 종속성을 제거하고 다시 추가하십시오. 그런 다음 원하는 종속성을 새로 고칩니다.



0

이 디렉토리를 삭제하십시오.

C:\Users\[username]\.gradle

3
로컬 구성이있을 수 있으므로 다른 답변에서 언급 한 것처럼 캐시 디렉토리를 삭제하거나 이름을 바꾸거나 재배치하는 것이 더 나은 솔루션입니다.
dimwittedanimal

0

대부분의 경우 프로젝트를 재 빌드하기 만하면됩니다. 때때로 당신은 실행해야./gradlew build --refresh-dependencies 몇 가지 답변이 이미 언급 한대로 의존도에 따라 시간이 오래 걸립니다). 그러나 때로는 그중 아무것도 작동하지 않습니다. 종속성이 업데이트되지 않습니다. 그런 다음이 작업을 수행 할 수 있습니다.

  1. gradle 파일에서 종속성 제거
  2. 프로젝트를 실행 / 디버그하고 실패 할 때까지 기다립니다 ( NonExistingClass 이유가 있음)
  3. "프로젝트 빌드"를 누르고 성공적으로 완료 될 때까지 기다리십시오.
  4. 다시 한번 실행 / 디버그

이것은 어리 석고 광기처럼 보이지만 실제로는이 절차를 매일 사용합니다. 단순히 필요한 종속성이 수십 번 업데이트 될 수 있고 적절한 해결책이 효과가 없기 때문입니다.


0

당신은 이렇게 할 수 있습니다

https://marschall.github.io/2017/04/17/disabling-gradle-cache.html

Gradle 빌드 캐시 비활성화에서 인용하려면

Gradle 빌드 캐시는 Gradle을 사용하여 대규모 프로젝트를 정기적으로 빌드 할 때 유용 할 수 있습니다. 그러나 오픈 소스 프로젝트를 가끔씩 만 구축하면 빠르게 커질 수 있습니다.

Gradle 빌드 캐시를 비활성화하려면 다음 줄을 추가하십시오. ~/.gradle/gradle.properties

org.gradle.caching=false

기존 캐시를 정리할 수 있습니다

rm -rf $HOME/.gradle/caches/
rm -rf $HOME/.gradle/wrapper/

0

이클립스를 사용하고 있고 강제 이클립스가 종속성을 다시로드하려면 아래 명령을 시도하십시오

gradlew clean cleaneclipse build eclipse --refresh-dependencies

2
왜 Eclipse를 사용 하시겠습니까? 특히 2018 년에!
크리스토퍼 페리

0

캐시 폴더에서 특정 종속성을 수동으로 삭제하는 것만 가능합니다. 엔터프라이즈 리포지토리의 동료가 만든 인공물입니다.


0

제 경우에는 위의 어느 것도 효과가 없었습니다.

  • build.gradle , 내가 가지고있는 미해결 수입품과 관련된 종속성에 대한 의견
  • "지금 동기화"를 클릭하십시오
  • 내가 방금 언급 한 내용을 주석 해제
  • "지금 동기화"를 다시 클릭

그런 다음 수입품이 다시 올바르게 해결되었습니다.


-7

파일을 다시 다운로드해야하므로 손상된 파일을 수동으로 다운로드하여 바꾸고 프로젝트를 다시 동기화 할 수 있습니다. 이 위치로 이동 하십시오. /services.gradle.org/distributions/ 동일한 파일을 찾아 해당 위치에 다운로드하여 붙여 넣은 다음 프로젝트를 동기화하십시오. 그것이 당신에게도 효과가 있기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.