1. ホーム
  2. android-studio

[解決済み] メインクラス org.gradle.wrapper.GradleWrapperMain が見つからない、またはロードできない。

2022-01-29 10:06:33

質問

のようなローカルディレクトリを削除して、プロジェクト全体をクリーンアップしました。 ~/.gradle , ~/.m2 ~./android~/workspace/project/.gradle を選択し File -> Invalidate Caches / Restart... をAndroid Studioで実行します。 これで、コマンドの実行 ./gradlew は、次のような出力をもたらします。

usr$ ./gradlew tasks
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain

言うまでもなく、削除しすぎました。問題は、どうすれば再び修復できるかということです。どうすれば直るのか、何かいい方法はないでしょうか?

解決方法を教えてください。

gradleのラッパーが見つからない、壊れている、または破損している。

gradle wrapperとは何ですか。
gradlew は、gradleのラッパー実行ファイル(Windowsではバッチスクリプト、それ以外ではシェルスクリプト)です。このラッパースクリプトを起動すると、定義されたgradleのバージョンをダウンロードし、実行します。ラッパーをプロジェクトと一緒に配布することで、Gradleを事前にインストールすることなく、誰でも作業を行うことができます。さらに良いことに、ビルドのユーザーは、ビルドが動作するように設計されたGradleのバージョンを使用することが保証されています。

gradleラッパーを復元する。
以前は、このような場合は wrapper タスクに追加して、gradle ラッパーとその依存関係をすべてリストアします。例えば、以下のような感じです。

task wrapper(type: Wrapper) {
    gradleVersion = '4.1'
}

新しいバージョンのgradleでは、この作業は必要ありません。ビルトインタスクになりました。実行するだけです。

gradle wrapper

また、バージョンなどを指定するフラグを追加で指定することもできます。

gradle wrapper --gradle-version 6.2 --distribution-type all

このタスクを実行すると、gradle ラッパースクリプトと必要な jar ファイルがソースフォルダに追加されます。プロパティは、gradle/wrapper/gradle-wrapper.propertiesに保存されます。

(これを実行するためには、ローカルにgradleをインストールする必要がある場合があります。 brew install gradle をMacで使用する場合など。より詳細な説明を見る こちら )

そもそも、なぜ欠落していたのでしょうか?
gradle wrapperが依存しているものを削除したようです。

しかし、よくある理由は、.gitignore エントリによって wrapper jar が git にチェックインされないようにすることです。.gitignore は、ソースフォルダ内にもありますし、ユーザーのホームフォルダや git のグローバル設定にあるグローバルなものもあります。一般的には *.jar のエントリを削除してください。

.gitignoreにgradlewのjarファイルに対する例外を追加することができます。

*.jar
!gradle/wrapper/gradle-wrapper.jar

または、ラッパーjarをgitに強制的に追加します。

git add -f gradle/wrapper/gradle-wrapper.jar

を参照してください。 Gradle ラッパー