리포지토리에서 종속성을 다시 다운로드하도록 gradle에 지시하는 방법은 무엇입니까?
리포지토리에서 종속성을 다시 다운로드하도록 gradle에 지시하는 방법은 무엇입니까?
답변:
일반적으로 명령 줄 옵션 --refresh-dependencies 를 사용하여 캐시의 종속성을 새로 고칠 수 있습니다 . 에서 캐시 된 파일을 삭제할 수도 있습니다 ~/.gradle/caches
. 다음 빌드에서 Gradle은 다시 다운로드를 시도합니다.
특정 사용 사례는 무엇입니까? 동적 종속성 버전 또는 SNAPSHOT 버전을 사용합니까?
Unix 시스템에서 Gradle이 다음을 사용하여 다운로드 한 모든 기존 아티팩트 (아티팩트 및 메타 데이터)를 삭제할 수 있습니다.
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
최신 버전의 Gradle을 사용하는 경우 --refresh-dependencies 옵션을 사용할 수 있습니다.
./gradlew build --refresh-dependencies
Gradle 매뉴얼을 참조하십시오 .
--refresh-dependencies 옵션은 Gradle에게 해결 된 모듈 및 아티팩트에 대한 모든 캐시 된 항목을 무시하도록 지시합니다. 동적 버전이 다시 계산되고 모듈이 새로 고쳐지고 아티팩트가 다운로드 된 모든 구성된 리포지토리에 대해 새로운 해결이 수행됩니다.
종속성을 '변경'으로 플래그 지정하여 빌드 스크립트에서 일부 종속성을 다시 다운로드하도록 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 }
이 포럼 스레드 에서이 솔루션을 찾았습니다 .
cacheChangingModulesFor
에 changing: true
의해 암시되기 때문에 선택 사항 입니다. 위의 함의 때문에 -SNAPSHOT
여기에서 속기를 사용할 수 있습니다 compile 'group:projectA:1.1-SNAPSHOT'
. resolutionStrategy를 하나의 구성으로 제한 할 수도 있습니다 configurations.compile.resolutionS...
.
compile 'com.burrowsapps:ads:1.0:true'
?
MAC의 경우
./gradlew build --refresh-dependencies
Windows의 경우
gradlew build --refresh-dependencies
시도해 볼 수도 있습니다 gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
태스크를 사용하여 생성 할 수 있습니다 . 다른 Gradle 래퍼를 사용하여 래퍼를 생성 할 수도 있습니다.gradlew wrapper
Windows의 경우 ... gradle을 다시 다운로드하여 특정 종속성 을 만들려면
아래 디렉토리에서 다시 다운로드하려는 종속성을 삭제하십시오.
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
경로에서 모든 메타 데이터 디렉토리를 삭제하십시오 .
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
프로젝트의 루트 디렉토리에서 실행하십시오 gradle build
(또는 gradlew build
gradle wrapper를 사용하는 경우).
참고 : 위 파일 경로의 숫자는 다를 수 있습니다.
여기에 제시된 답변과 같이 전체 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이 종속성을 다시 다운로드합니다.
이를 수행하는 두 가지 방법이 있습니다.
사용 --refresh-종속성 옵션 :
./gradlew build --refresh-dependencies
간단한 설명 --refresh-dependencies 옵션은 Gradle에게 해결 된 모듈 및 아티팩트에 대한 모든 캐시 된 항목을 무시하도록 지시합니다.
긴 설명
삭제 사용 : 캐시를 삭제할 때
rm -rf $HOME/.gradle/caches/
캐시 된 항아리와 sha1 합계를 모두 청소하면 Gradle이 컴퓨터에 아티팩트가 없으며 모든 것을 다운로드 해야하는 상황에 있습니다. 예, 처음으로 100 % 작동하지만 다른 SNAPSHOT이 릴리스되고 종속성 트리의 일부인 경우 캐시를 새로 고치거나 제거하기 위해 다시 선택할 수 있습니다.
이것은 나를 위해 일했습니다. 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 패널을 열고 파란색 원 화살표 버튼을 클릭하십시오. 항상 업데이트가 새로운 사본을 얻는 것을 볼 수 있습니다.
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에서 파일을 드래그합니다.
모든 캐시를 삭제하면 모든 종속성이 다시 다운로드됩니다. 너무 오래 걸리고 모든 의존성을 다시 다운로드하기 위해 다시 기다리는 것은 지루합니다.
어떻게하면이 방법을 아래에서 해결할 수 있었습니까?
새로 고쳐야하는 그룹을 삭제하십시오.
예 : com.user.test 그룹 을 새로 고치 려면
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
그런 다음 build.gradle에서 종속성을 제거하고 다시 추가하십시오. 그런 다음 원하는 종속성을 새로 고칩니다.
gradle 2.14.1이 문제를 해결한다고 생각합니다. 허용되는 답변은 맞지만 –refresh-dependencies와 함께 gradle에 버그가 있습니다. 2.14.1이 수정했습니다.
참조 https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556를
이 디렉토리를 삭제하십시오.
C:\Users\[username]\.gradle
대부분의 경우 프로젝트를 재 빌드하기 만하면됩니다. 때때로 당신은 실행해야./gradlew build --refresh-dependencies
몇 가지 답변이 이미 언급 한대로 의존도에 따라 시간이 오래 걸립니다). 그러나 때로는 그중 아무것도 작동하지 않습니다. 종속성이 업데이트되지 않습니다. 그런 다음이 작업을 수행 할 수 있습니다.
NonExistingClass
이유가 있음)이것은 어리 석고 광기처럼 보이지만 실제로는이 절차를 매일 사용합니다. 단순히 필요한 종속성이 수십 번 업데이트 될 수 있고 적절한 해결책이 효과가 없기 때문입니다.
당신은 이렇게 할 수 있습니다
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/
파일을 다시 다운로드해야하므로 손상된 파일을 수동으로 다운로드하여 바꾸고 프로젝트를 다시 동기화 할 수 있습니다. 이 위치로 이동 하십시오. /services.gradle.org/distributions/ 동일한 파일을 찾아 해당 위치에 다운로드하여 붙여 넣은 다음 프로젝트를 동기화하십시오. 그것이 당신에게도 효과가 있기를 바랍니다.