web-dev-qa-db-ja.com

どうやってgradleに依存関係の再ダウンロードを強制することができますか?

リポジトリから依存関係を再ダウンロードするようにgradleに指示するにはどうすればよいですか。

620
fedor.belov

一般に、コマンドラインオプション --refresh-dependencies を使用してキャッシュ内の依存関係を更新できます。 ~/.gradle/cachesの下にあるキャッシュファイルを削除することもできます。次回のビルドで、Gradleはそれらをもう一度ダウンロードしようとしました。

あなたの特定のユースケースは何ですか?動的依存関係バージョンまたはSNAPSHOTバージョンのどちらを使用しますか?


Unixシステムでは、Gradleがダウンロードした既存の成果物(成果物とメタデータ)をすべて削除できます。

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

最近のバージョンのGradleを使用している場合は、--refresh-dependenciesオプションを使用できます。

./gradlew build --refresh-dependencies

Gradleのマニュアル を参照することができます。

--refresh-dependenciesオプションは、解決されたモジュールとアーティファクトについてキャッシュされたすべてのエントリを無視するようにGradleに指示します。 動的バージョンが再計算され、モジュールが更新され、成果物がダウンロードされた状態で、構成されたすべてのリポジトリーに対して新規解決が実行されます。

524
Naga

依存関係に「変更中」のフラグを立てることで、ビルドスクリプト内の依存関係を再ダウンロードするようにGradleに指示できます。 Gradleは24時間ごとにアップデートを確認しますが、resolutionStrategy DSLを使用して設定できます。 SNAPSHOTまたはNIGHTLYビルドにこれを使用すると便利です。

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

拡大:

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

要約:

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

私はこの フォーラムのスレッド でこの解決策を見つけました。

275
Umi

Mac用

./gradlew build --refresh-dependencies

Windowsの場合

gradlew build --refresh-dependencies

gradlew assembleDevelopmentDebug --refresh-dependenciesも試すことができます

57
Ali

Windowsの場合 ... gradleを再ダウンロードするためのspecific依存関係:

  1. 以下のディレクトリから再ダウンロードしたい依存関係を削除します。

    C:\Users\[username]\.gradle\caches\modules-2\files-2.1
    
  2. パスにあるすべてのmetadataディレクトリを削除します。

    C:\Users\[username]\.gradle\caches\modules-2\metadata-*
    
  3. プロジェクトのルートディレクトリでgradle build(またはgradle wrapperを使用している場合はgradlew build)を実行します。

注:上記のファイルパス内の数字はあなたにとって異なる場合があります。

22
Eric

キャッシュされたjarファイルでフォルダを削除できます。

私の場合、 Macの場合 ライブラリは次のパスにキャッシュされています。

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

キャッシュされたライブラリフォルダ(上記の例では "cached-library-to-remove")を削除し、プロジェクトのビルドフォルダを削除して再度コンパイルしました。それから新鮮な図書館がダウンロードされました。

16
Farhan

ここでいくつかの回答から示唆されているように、グラドルキャッシュ全体を削除する代わりに、特定のグループまたはアーティファクト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を使用して依存関係を再ダウンロードします。

10
Jared Rummler

これは私のために働きました。 [ファイル]> [設定]> [Gradle]> [オフライン作業]のボタンをオフにして、Gradleがオフラインに設定されていないことを確認します。

これをあなたのbuild.gradleのトップレベルに追加してください。

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

私は私の依存関係がこのように書かれていることを確認しました:

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

その後、Android StudioでGradleパネルを開き、青い丸の矢印ボタンをクリックします。私は自分のアップデートが新しい新鮮なコピーを取得しているのをいつでも見ることができます。

7
Juan Mendez

それには2つの方法があります。

  1. 依存関係をリフレッシュするためのコマンドラインオプションの使用.
  2. Gradleによってアーティファクトがキャッシュされているローカルキャッシュを削除してビルドをトリガーすることができます

--refresh-dependencies optionを使用する。

./gradlew build --refresh-dependencies

簡単な説明 --refresh-dependenciesオプションは、解決されたモジュールとアーティファクトについてキャッシュされたすべてのエントリを無視するようにGradleに指示します。

長い説明

  • [依存関係の更新] Gradleは常に更新されたアーティファクトを確認するためにリモートサーバーにアクセスしますが、Gradleは同じファイルが既にキャッシュに存在するファイルをダウンロードすることは避けます。
    • First GradleはHEADリクエストを発行し、サーバーがファイルを前回から変更されていないと報告するかどうかをチェックします(「content-length」と「last-modified」が変更されていない場合)。この場合、「キャッシュされたリソースは最新の状態です(lastModified:{})」というメッセージが表示されます。
    • 次のGradleは、可能であれば(HEADリクエストから、または '.sha1'ファイルをダウンロードすることによって)リモートチェックサムを決定します。このチェックサムが(任意のリポジトリから)既にダウンロードされた別のファイルと一致する場合再ダウンロードするのではなく、単にファイルをキャッシュにコピーするだけです。この場合、「「チェックサムが一致するローカルで利用可能なリソースが見つかりました:[{}、{}]」というメッセージが表示されます。

Deleteを使う:キャッシュを削除したとき

rm -rf $HOME/.gradle/caches/

キャッシュされたjarファイルとsha1の合計をすべて削除するだけで、Gradleはマシンにアーティファクトがなく、すべてをダウンロードしなければならない状況にあります。はい、それは初めて100%動作しますが、別のSNAPSHOTがリリースされ、それがあなたの依存関係ツリーの一部であるとき、あなたはキャッシュをリフレッシュするか消去するかの選択の前に再び直面するでしょう。

6
Xelian

このディレクトリを削除します。

C:\Users\[username]\.gradle
2
farhang67

Android Studio 3.4.1の場合

単に([右側]にある)[Gradle]タブを開いてリスト内の親([Android]と表示されているはずです)を右クリックし、[Refresh dependencies]を選択します。

これで問題は解決します。

1
Captain Sponge

Mb私は遅すぎますが、私の解決策は単一リポジトリ用です。 〜/ .gradle/*を削除するのはやり過ぎだと思います。私がぶつかった問題は、私がソースがあったディレクトリを削除していて、gradleがnexusからではない別のバージョンを取得していたことでした。それを避けるために、私は次を実行します。

~/.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

その後は、nexusからファイルをドラッグすることになります。

1
Vadim

gradleコマンドをどこで実行するのか疑問に思っている人のために:

Androidスタジオを開く - >ターミナルをクリックする(Androidスタジオのベースにある) - >コマンドツールが開く--->コマンドを入力する(gradlew build --refresh-dependencies)

1
kgandroid

Eclipseを使用していて、Eclipseに依存関係を強制的に再ロードさせたい場合は、以下のコマンドを試してください。

gradlew clean cleaneclipse build Eclipse --refresh-dependencies
0
ULLAS K

すべてのキャッシュを削除すると、すべての依存関係が再びダウンロードされます。それでそれはとても長い時間がかかります、そしてそれはすべての依存関係を再びダウンロードするためにもう一度待つことを退屈です.

どのように私はこれ以下の方法でこれを解決することができました。

更新する必要があるグループを削除するだけです。

例: com.user.test groupを更新したい場合

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

それからbuild.gradleから依存関係を削除し、それを追加し直します。それからそれは私たちが望む依存関係をリフレッシュします。

0
Chamly Idunil

あなたはこれのようにそれをすることができます

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
wuqilong

ほとんどの場合、単にプロジェクトを再構築するだけでうまくいきます。いくつかの答えがすでに述べたように(依存関係の程度によっては長い時間がかかります)、./gradlew build --refresh-dependenciesを実行しなければならない場合があります。しかし、依存関係が更新されないこともあります。その後、これを行うことができます。

  1. Gradleファイルから依存関係を削除する
  2. あなたのプロジェクトを実行/デバッグし、失敗するのを待ちます(NonExistingClassの理由で)
  3. "build project"をクリックして、それが正常に終了するのを待ちます
  4. もう一度実行/デバッグ

これはばかげていて狂気のように思えますが、私は実際に毎日この手順を使用しています。なぜなら、必要な依存関係が何十回も更新され、適切な解決策が何も効果がないからです。

0
egorikem

上記の解決策のどれも私のために働きませんでした。

IntelliJを使用している場合、私にとってそれを解決したのは、単にすべてのGradleプロジェクトを更新することでした。

enter image description here

0
Kobbi Gal

課題2.14.1でこの問題は解決したと思います。受け入れられた答えは正しいですが、-refresh-dependenciesのgradleにバグがあります。 2.14.1でそれが修正されています。

https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556を参照してください

0
Jacques Koorts