Gradleに依存関係を再ダウンロードさせるにはどうすればよいですか?


742

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

回答:


845

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

あなたの具体的なユースケースは何ですか?動的依存関係バージョンまたはSNAPSHOTバージョンを使用していますか?


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

rm -rf $HOME/.gradle/caches/

27
OPについて話すことはできませんが、私の具体的な使用例は、MavenCentral以外のリポジトリーの構成が実際に機能するかどうかをテストすることです。
Emil Lundberg 2013年

7
〜/ .m2ディレクトリ(存在する場合)も削除する必要があります。Mavenリポジトリを設定している場合、これらのアーティファクトのいくつかは〜/ .m2にもダウンロードされます。きれいな状態で開始するには、〜/ .gradleと〜/ .m2の両方を削除することをお勧めします。
Gopinath MR 2014

17
Mavenローカルは、ビルドでそれがリポジトリとして定義されている場合にのみ関連します。
ベンジャミンムシュコ2014年

21
.m2にはMaven設定ファイルが含まれる可能性があるため、@ Gopinathは危険なアドバイスです。.m2 / repositoryを削除することを意味していると思います
Ward

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

708

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

./gradlew build --refresh-dependencies

Gradleのマニュアルを参照してください。

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


10
gradleはすべての依存関係ファイルをダウンロードしようとするため、時間がかかることに注意してください。
ナガ

11
これが常に機能するとは限らないことにも注意してください。昨夜遅くに新しいバージョンをデプロイしたとき、私は「gradle clear war --refresh-dependencies」を実行して、3日前のキャッシュされたjarでテストしたところです。新しいコードに追加された依存関係がないため、ビルドが壊れました。その後も、キャッシュに3日経過したjarファイルが残っていました。結局、.m2キャッシュのバージョンフォルダーを削除して再構築するだけになりました。基本的に選択の余地がなかったため、最新バージョンを取得しました。
Spanky Quigman

10
./gradlew --refresh-dependencies
headsvk 2017年

1
これは、Android Studioターミナルから「./gradlew build --refresh-dependencies」としてうまく機能しました。ありがとう!
the_dude_abides 2017

2
IDE内からのビルドでAndroid Studioにこれを実行させる方法はありますか?
karl 2018

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
同じライブラリのソースに対してこれがどのように機能するか知っていますか?現在、コンパイルされたライブラリは変更されるたびにダウンロードされますが、ソースはそうではありません。
MarkusWüstenberg2014

2
スナップショットのバージョンは、定義により「変化」しています。Gradleはそれを知っているので、依存関係宣言でこれを実際に定義する必要はありません。
ベンジャミンムシュコ2014年

4
これをありがとう。FWIW、私たちの依存関係はスナップショットバージョンにあり、これを行うまで、すべてのビルドで更新をチェックしていませんでした。
2014

10
cacheChangingModulesForはキーであり、changing: trueによって暗示されるためオプションです。上記の意味合いのため、-SNAPSHOTここでは省略形を使用できcompile 'group:projectA:1.1-SNAPSHOT'ます。resolutionStrategyを1つの構成に制限することもできます:configurations.compile.resolutionS...
TWiStErRob 2014年

2
@海これの凝縮版はありますか?など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

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ラッパーを使用している場合)。

注:上記のファイルパスの数値は、実際とは異なる場合があります。


19

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

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

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

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


16

ここでいくつかの回答が示唆しているように、gradleキャッシュ全体を削除する代わりに、特定のグループまたはアーティファクトIDのキャッシュを削除できます。次の関数をmyに追加しました.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

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

  1. コマンドラインオプションを使用して依存関係を更新します。
  2. あなたはGradleとトリガービルドによってartefastがキャッシュであるローカルキャッシュを削除することができます

--refresh-dependenciesオプションの使用:

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

キャッシュされたすべてのjarファイルとsha1サムをクリーンアップするだけで、Gradleはマシンにアーティファクトがなく、すべてをダウンロードする必要がある状況にあります。はい、初めて100%動作しますが、別のスナップショットがリリースされ、依存関係ツリーの一部である場合、キャッシュを更新またはパージするという選択肢の前に再び直面します。


9

これでうまくいきました。[ファイル]> [設定]> [Gradle]> [オフライン作業]のボタンをオフにして、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. Android Studioを開く
  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はネクサスからファイルをドラッグしています。


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 2017年

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

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

gradlew clean cleaneclipse build eclipse --refresh-dependencies

2
なぜEclipseを使うのですか?特に2018年に!
クリストファーペリー

0

キャッシュフォルダー内の特定の依存関係を手動で削除するだけで機能します...エンタープライズリポジトリの同僚が作成したアーティファクト。


0

私の場合、上記のどれもうまくいきませんでした、私がしたことは:

  • build.gradle、私が持っていた未解決のインポートに関連する依存関係をコメントしています
  • 「今すぐ同期」をクリック
  • 私がコメントしたばかりのコメントを外す
  • もう一度「今すぐ同期」をクリック

その後、インポートは再び適切に解決されました。


-7

ファイルを再ダウンロードする必要があるため、破損したファイルを手動でダウンロードして置き換え、プロジェクトを再度同期できます。この場所に移動しますC:\ users [username] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zipここでgradle3.3allzipを削除し、このサイトからもう一度ダウンロードして置き換え ますhttps:/ /services.gradle.org/distributions/ 同じファイルを見つけて、ダウンロードしてその場所に貼り付け、プロジェクトを同期します。それもあなたのために働くことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.