リポジトリから依存関係を再ダウンロードするようにgradleに指示するにはどうすればよいですか?
25 に答える
通常、コマンドラインオプション--refresh-dependenciesを使用して、キャッシュ内の依存関係を更新できます。の下にあるキャッシュファイルを削除することもできます~/.gradle/caches
。次のビルドで、Gradleはそれらを再度ダウンロードしようとします。
あなたの具体的なユースケースは何ですか?動的依存関係バージョンまたはSNAPSHOTバージョンを使用していますか?
Unixシステムでは、Gradleがダウンロードした既存のアーティファクト(アーティファクトとメタデータ)をすべて削除できます。
rm -rf $HOME/.gradle/caches/
--refresh-dependenciesは、すべてのアーティファクトを常に再ダウンロードするとは限らないことに注意してください。リポジトリに存在するものと一致する場合は、既存のコピーを使用します。Gradleユーザーガイドから、依存関係を更新します:
--refresh-dependenciesオプションは、解決されたモジュールとアーティファクトのキャッシュされたすべてのエントリを無視するようにGradleに指示します。構成されたすべてのリポジトリに対して新たな解決が実行され、動的バージョンが再計算され、モジュールが更新され、アーティファクトがダウンロードされます。ただし、可能な場合、Gradleは、以前にダウンロードしたアーティファクトが有効かどうかを確認してから、再度ダウンロードします。これは、リポジトリに公開されているSHA1値を、既存のダウンロードされたアーティファクトのSHA1値と比較することによって行われます。
[...]
--refresh-dependenciesを使用すると、依存関係のダウンロードが強制されると考えるのはよくある誤解です。これは当てはまりません。Gradleは、動的な依存関係を更新するために厳密に必要なものだけを実行します。これには、新しいリストやメタデータファイル、さらにはアーティファクトのダウンロードが含まれる場合がありますが、何も変更されていない場合、影響は最小限に抑えられます。
Gradleの最新バージョンを使用している場合は、-refresh-dependenciesオプションを使用できます。
./gradlew build --refresh-dependencies
Gradleのマニュアルを参照できます。
--refresh-dependenciesオプションは、解決されたモジュールとアーティファクトのキャッシュされたすべてのエントリを無視するようにGradleに指示します。構成されたすべてのリポジトリに対して新たな解決が実行され、動的バージョンが再計算され、モジュールが更新され、アーティファクトがダウンロードされます。
依存関係に「変更中」のフラグを立てることで、ビルドスクリプトの一部の依存関係を再ダウンロードするようにGradleに指示できます。その後、Gradleは24時間ごとに更新をチェックしますが、これはresolutionStrategyDSLを使用して構成できます。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 }
私はこのフォーラムスレッドでこの解決策を見つけました。
Mac用
./gradlew build --refresh-dependencies
Windowsの場合
gradlew build --refresh-dependencies
試すこともできますgradlew assembleDevelopmentDebug --refresh-dependencies
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ラッパーを使用している場合)。
注:上記のファイルパスの番号は、異なる場合があります。
キャッシュされたjarファイルを含むフォルダを削除できます。
私の場合、Macではライブラリは次のパスにキャッシュされていました。
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
キャッシュされたライブラリフォルダー(上記の例では「cached-library-to-remove」)を削除し、プロジェクトのビルドフォルダーを削除して、再度コンパイルしました。その後、新しいライブラリがダウンロードされました。
ここでの回答が示唆しているように、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は依存関係を再ダウンロードします。
キャッシュされた「リリース」バージョンを更新するには、ローカルキャッシュをクリアするしかありません。
rm -rf $HOME/.gradle/caches/
キャッシュされた「スナップショット」バージョンを更新するには、次のことができます。
./gradlew build --refresh-dependencies
Gradleコマンドをどこで実行するか疑問に思っている人のために:
- AndroidStudioを開きます
- ターミナルをクリックします(AndroidStudioのベースにあります)
- コマンドツールが開きます
- コマンドを入力してください
gradlew build --refresh-dependencies
これを行うには2つの方法があります。
- コマンドラインオプションを使用して扶養家族の現金を更新します。
- ArtefastがキャッシュであるローカルキャッシュをGradleで削除し、ビルドをトリガーできます
--refresh-dependenciesオプションの使用:
./gradlew build --refresh-dependencies
簡単な説明--refresh-dependenciesオプションは、解決されたモジュールとアーティファクトのキャッシュされたすべてのエントリを無視するようにGradleに指示します。
長い説明
- –refresh-dependenciesを使用すると、Gradleは常にリモートサーバーにアクセスして、更新されたアーティファクトをチェックします。ただし、Gradleは、同じファイルがキャッシュにすでに存在するファイルのダウンロードを回避します。
- First GradleはHEADリクエストを行い、サーバーがファイルを前回から変更されていないものとして報告するかどうかを確認します(「content-length」と「last-modified」が変更されていない場合)。この場合、「キャッシュされたリソースは最新です(lastModified:{})」というメッセージが表示されます。
- 次のGradleは、可能であればリモートチェックサムを決定します(HEADリクエストから、または「.sha1」ファイルをダウンロードすることにより)。このチェックサムが(任意のリポジトリから)すでにダウンロードされた別のファイルと一致する場合、Gradleはファイルを再ダウンロードするのではなく、キャッシュします。この場合、「チェックサムが一致するローカルで利用可能なリソースが見つかりました:[{}、{}]」というメッセージが表示されます。
削除の使用:キャッシュを削除する場合
rm -rf $HOME/.gradle/caches/
キャッシュされたすべてのjarファイルとsha1合計をクリーンアップするだけで、Gradleはマシンにアーティファクトがなく、すべてをダウンロードする必要がある状況にあります。はい、初めて100%動作しますが、別のスナップショットがリリースされ、それが依存関係ツリーの一部である場合、キャッシュを更新するかパージするかの選択の前に再び直面します。
AndroidStudio3.4.1の場合
Gradleタブ(右側にあります)を開き、リスト内の親(「Android」と呼ばれるはずです)を右クリックして、「依存関係の更新」を選択します。
これで問題が解決するはずです。
これは私のために働いた。[ファイル]>[設定]>[Gradle]>[オフライン作業]のボタンをオフにして、Gradleがオフラインに設定されていないことを確認します。
これをbuild.gradleのトップレベルに追加します。これは、上記の依存関係があると便利です。
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
依存関係が次のように記述されていることを確認しました。
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
その後、Android StudioでGradleパネルを開き、青い丸い矢印ボタンをクリックします。私はいつでも私の更新が新しい新しいコピーを取得しているのを見ることができます。
gradleバージョン6.3、kotlinバージョン1.3.70、Groovy2.5.10用にchange
変更されているようですisChange
動作構成は
implementation("com.sample:commons:1.0.0-SNAPSHOT") {
isChanging = true
}
また、このコマンドを実行して最新のものを取得します
./gradlew assemble --refresh-dependencies
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
その後、gradleはnexusからファイルをドラッグしています。
私の場合、上記のどれもうまくいきませんでした、私がしたことは:
- で
build.gradle
、私が持っていた未解決のインポートに関連する依存関係をコメントする - 「今すぐ同期」をクリック
- コメントした内容のコメントを外す
- もう一度[今すぐ同期]をクリックします
その後、私のインポートは再び適切に解決されました。
すべてのキャッシュを削除すると、すべての依存関係が再度ダウンロードされます。そのため、非常に長い時間がかかり、すべての依存関係を再ダウンロードするのをもう一度待つのは退屈なことです。
しかし、私はこれを以下の方法で解決することができました。
更新が必要なグループを削除するだけです。
例:com.user.testグループを更新する場合
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
次に、build.gradleから依存関係を削除し、再度追加します。次に、必要な依存関係を更新します。
gradle2.14.1で問題が解決したと思います。受け入れられた答えは正しいですが、–refresh-dependenciesを使用したgradleにバグがあります。2.14.1はそれを修正します。
https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556を参照してください
ほとんどの場合、プロジェクトを再構築するだけでうまくいくはずです。いくつかの答えがすでに述べたように、実行しなければならない場合があります./gradlew build --refresh-dependencies
(依存関係の量によっては、時間がかかります)。ただし、これらのいずれも機能しない場合があります。依存関係が更新されないだけです。次に、これを行うことができます:
- Gradleファイルから依存関係を削除します
- プロジェクトを実行/デバッグし、失敗するのを待ちます(
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/
Eclipseを使用していて、Eclipseに依存関係を再ロードさせたい場合は、以下のコマンドを試すことができます。
gradlew clean cleaneclipse build eclipse --refresh-dependencies
キャッシュフォルダ内の特定の依存関係を手動で削除することだけが機能します...エンタープライズリポジトリの同僚によって作成されたアーティファクト。
このディレクトリを削除します。
C:\Users\[username]\.gradle
再ダウンロードする必要があるため、破損したファイルを手動でダウンロードして置き換え、プロジェクトを再度同期することができます。この場所に移動しますC:\ users [username] .gradle \wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zipここでgradle3.3allzipを削除し、このサイトから再度ダウンロードして置き換え ますhttps:/ /services.gradle.org/distributions/ 同じファイルを見つけてダウンロードし、その場所に貼り付けてから、プロジェクトを同期します。それがあなたにもうまくいくことを願っています。