Die Hauptklasse org.gradle.wrapper.GradleWrapperMain konnte nicht gefunden oder geladen werden

166

Ich reinigte das ganze Projekt durch lokale Verzeichnisse wie Löschen ~/.gradle, ~/.m2 ~./androidund ~/workspace/project/.gradleund chosing File -> Invalidate Caches / Restart...in Android Studio. Die Ausführung des Befehls ./gradlewführt nun zu folgender Ausgabe:

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

Unnötig zu sagen, ich habe zu viel gelöscht, die Frage ist, wie kann es wieder repariert werden? Haben Sie Ideen, wie Sie dies beheben können?

SePröbläm
quelle
4
Sie sollten erneut ausgeführt werden können, um gradle wrapperden fehlenden Code neu zu generieren. Dies setzt voraus, dass Sie kein Setup für die Quellcodeverwaltung haben.
cjstehno
Haben Sie Gradle auf Ihrem Computer installiert? Sie können versuchen, reguläres Gradle anstelle von Gradlew aufzurufen. Sollte wahrscheinlich auch Gradle Wrapper wiederherstellen.
RaGe

Antworten:

133

Ihr Gradle-Wrapper fehlt, ist kaputt oder beschädigt.

Was ist Gradle Wrapper? Ist
gradlew der Gradle Wrapper ausführbar? Batch-Skript unter Windows und Shell-Skript an anderer Stelle. Das Wrapper-Skript lädt beim Aufrufen die definierte Gradle-Version herunter und führt sie aus. Durch die Verteilung des Wrappers mit Ihrem Projekt kann jeder damit arbeiten, ohne zuvor Gradle installieren zu müssen. Noch besser ist, dass Benutzer des Builds garantiert die Version von Gradle verwenden, für die der Build entwickelt wurde.

Wiederherstellen des Gradle-Wrappers:
Früher mussten Sie wrapperIhrem build.gradle eine Aufgabe hinzufügen, um den Gradle-Wrapper und alle seine Abhängigkeiten wiederherzustellen. Zum Beispiel:

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

Neuere Versionen von gradle erfordern dies nicht. Es ist jetzt eine eingebaute Aufgabe. Renn einfach:

gradle wrapper

Sie können auch zusätzliche Flags angeben, um Versionen usw. Anzugeben

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

Wenn Sie diese Aufgabe ausführen, werden ein Gradle-Wrapper-Skript und die erforderlichen JAR-Dateien zu Ihren Quellordnern hinzugefügt. Eigenschaften werden in gradle / wrapper / gradle-wrapper.properties gespeichert

(Möglicherweise müssen Sie gradle lokal installieren, um dies auszuführen. brew install gradleZum Beispiel auf einem Mac. Weitere Anweisungen finden Sie hier. )

Warum fehlte es überhaupt?
OP scheint etwas gelöscht zu haben, von dem Gradle Wrapper abhängt.

Ein häufiger Grund ist jedoch, dass ein .gitignore-Eintrag verhindert, dass Wrapper-Jars in git eingecheckt werden. Beachten Sie, dass sich der gültige Gitignore möglicherweise im Quellordner oder global im Benutzerordner oder in der globalen Git-Konfiguration befindet. Es ist üblich, einen *.jarEintrag in .gitignore zu haben.

Sie können eine Ausnahme für die JAR-Dateien von gradlew in .gitignore hinzufügen

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

oder zwingen Sie das Wrapper Glas in Git hinzufügen

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

Ref: Gradle Wrapper

Wut
quelle
1
Vielen Dank!
SePröbläm
8
Eine andere mögliche Ursache für diesen Fehler ist, dass die Datei gradle / wrapper / gradle-wrapper.jar nicht ausführbar ist, z. B. wenn Sie Dateien von Windows kopiert haben ...
centic
Ich hatte diesen Fall und führte schließlich gradlew.bat ohne Argumente aus, um ihn zu beheben. Ich weiß nicht warum, aber einen Versuch wert.
Alwyn Schoeman
207

Zusätzlich zu @ RaGes Antwort könnte die Situation sein, in der ich ein globales Git-Ignorieren hatte, das .jarDateien ignorierte und daher das Gradle-Wrapper-Glas nie festgeschrieben wurde. Daher habe ich diesen Fehler nach einem Versuch auf dem Jenkins-Server erhalten /var/lib/jenkins/my_project/gradlew build. Ich musste explizit ein Hinzufügen des Glases erzwingen und dann festlegen:

git add -f gradle/wrapper/gradle-wrapper.jar
HankCa
quelle
17
Dies war in der Tat das Problem. Mir war nicht klar, dass ich einen globalen Gitignore hatte.
amey91
1
Schön. Dies war auch bei mir der Fall.
Brendan
Das war genau mein Problem ... Danke Kumpel!
rufen
Ich arbeite an CI / CD in GitHub Actions und das war es für mich. Danke dir!
Andi
43

Was für mich funktioniert hat, ist zuerst zu laufen:

 gradle wrapper

Nach erfolgreichem Build konnte ich laufen

./gradlew assembleRelease

Hinweis: Um den gradle wrapperersten Lauf ausführen zu können brew install gradle. Wenn die Installation erfolgreich war, führen Sie sie gradle wrapperaus dem Projektstamm aus.

Quelle und Dank: http://gradle.org/docs/current/userguide/gradle_wrapper.html und https://stackoverflow.com/users/745574/rage

niklasingvar
quelle
1
Falls dieser Befehl nicht funktioniert, befindet sich auf AS auf der rechten Seite das Gradle-Bedienfeld. Klicken SieGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
Ich arbeite für mich.
Negrotico19
Ja, ich hatte das gleiche Problem beim springBoot-Projekt in IntelliJ IDE. Dieser Vorschlag hat das Problem behoben. Vielen Dank an @niklasingvar
Ermias K
41

In meinem Fall war es global .gitignore, wie in der Antwort von @ HankCa erläutert .

Anstatt das Glas zwangsweise hinzuzufügen, was Sie in jedem Gradle-Projekt beachten müssen, habe ich eine Überschreibung hinzugefügt, um das Wrapper-Glas wieder in mein globales Element aufzunehmen .gitignore:

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

Dies ist nützlich für mich, da ich viele Projekte habe, die Gradle verwenden. Git wird mich jetzt daran erinnern, das Wrapper-Glas einzuschließen.

Diese Überschreibung funktioniert, solange keine der oben genannten Verzeichnisse gradle-wrapper.jar(wie z. B. gradleund wrapper) ignoriert werden. Git wird aus Leistungsgründen nicht in ignorierte Verzeichnisse verschoben .

Alex Palmer
quelle
Ja, das ist das gleiche Problem in meinem Fall
Silentsudo
22

In meinem Fall habe ich wrapperbeim Kopieren des gradleOrdners den Unterordner weggelassen und den gleichen Fehler erhalten.

Die Hauptklasse org.gradle.wrapper.GradleWrapperMain konnte nicht gefunden oder geladen werden

Stellen Sie sicher, dass Sie die richtige Ordnerstruktur haben, wenn Sie den Wrapper von einem anderen Speicherort kopieren.

├── build.gradle
├── gradle
│ └ Wrapper
│ ├ gradle-wrapper.jar
│ └ gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
yantaq
quelle
Warum sollten Sie Wrapper kopieren? Durch einfaches Ausführen erhalten gradle wrapperSie genau das gleiche Ergebnis;)
Xerus
@Xerus, in einigen Unternehmensumgebungen gibt es Netzwerkeinschränkungen, die Sie nicht frei herunterladen können. In diesem Fall müssen Sie kopieren / verschieben.
Yantaq
8

Wahrscheinlich fehlt Ihnen die gradle-wrapper.jarDatei unter dem Verzeichnis gradle/wrapperin Ihrem Projekt.

Sie müssen diese Datei über dieses Skript in der Datei build.gradle wie folgt generieren:

task wrapper(type: Wrapper) {
   gradleVersion = '2.0' // version required
}

und Aufgabe ausführen:

gradle wrapper

Mit Gradle 2.4 (oder höher) können Sie einen Wrapper einrichten, ohne eine spezielle Aufgabe hinzuzufügen:

gradle wrapper --gradle-version 2.3

ODER

gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip

Alle Details finden Sie unter diesem Link

Luna Kong
quelle
Viele Fehler unter Windows 10 für "Gradle Wrapper - Gradle-Distribution-URL myEnterpriseRepository: 7070 / Gradle / Distributions / ... "
Liebe und Frieden - Joe Codeswell
Ja, dem Problem fehlt der Inhalt von gradle/wrapperdir. Dies kann behoben werden, gralde wrapperindem Sie das wie angegeben ausführen.
Yuri
Falls dieser Befehl nicht funktioniert, befindet sich auf AS auf der rechten Seite das Gradle-Bedienfeld. Klicken SieGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
4

Sie können auch gradlew.bat in Ihren Stammordner kopieren und den gradlew-wrapper in den gradlew-Ordner kopieren.

Das ist Arbeit für mich.

Kerl
quelle
4

Ich folgte den Antworten von oben, als ich darauf stieß. Und wenn Sie dieses Problem haben, stellen Sie sicher, dass Sie das Drücken von JAR- und Eigenschaftendateien erzwingen. Nach diesen beiden bekam ich dieses Problem nicht mehr.

git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
Jose Peralez
quelle
3

In meinem Fall (unter Windows 10) enthält gradlew.bat die folgenden Codezeilen:

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

Die Variable APP_HOME ist im Wesentlichen ein gradles-Stammordner für das Projekt. Wenn dies also auf irgendeine Weise durcheinander gebracht wird, erhalten Sie Folgendes:

Fehler: Die Hauptklasse org.gradle.wrapper.GradleWrapperMain konnte nicht gefunden oder geladen werden

Für mich war dies durcheinander, weil meine Projektordnerstruktur ein kaufmännisches Und (&) enthielt. ZB C: \ Test & Dev \ MyProject

Also versuchte gradel, die Datei gradle-wrapper.jar in einem Stammordner von C: \ Test zu finden (alles nach und einschließlich des '&' entfernen)

Ich fand dies, indem ich die folgende Zeile unter der darüber liegenden Zeile APP_HOME =% DIRNAME% hinzufügte. Führen Sie dann die Fledermausdatei aus, um das Ergebnis anzuzeigen.

echo "%APP_HOME%"

Es wird einige andere 'Sonderzeichen' geben, die einen Pfad / ein Verzeichnis beschädigen könnten.

Neil Watson
quelle
2

Ich habe den gleichen Fehler gesehen, aber in meinem Fall war es eine neue Git-Installation ohne installiertes LFS. Das betreffende Repo wurde mit LFS eingerichtet und die Datei gradle-wrapper.jar befand sich in LFS, sodass sie nur einen Zeiger auf den LFS-Server enthielt. Die Lösung war einfach, führen Sie einfach aus:

git lfs install

Und ein frischer Klon hat es geschafft. Ich nehme an, git lfs pulloder nur ein git pullhätte auch helfen können, aber die Person mit dem Problem hat beschlossen, stattdessen einen neuen Klon zu erstellen.

cb2
quelle
1

@HankCa hat das Problem auch in meinem Fall gelöst. Ich beschloss, meine gefährlichen **/*.jarIgnoranten in selbsterklärende zu ändern src/**/lib/*.jar, um solche Probleme in Zukunft zu vermeiden. Ignorierungen, die mit ** / * beginnen, sind zumindest für mich etwas zu gefährlich. Und es ist immer eine gute Idee, die Idee hinter eine .gitignore-Reihe zu bringen, indem man sie sich nur ansieht.


quelle
1

In meinem Fall wurde gradle-wrapper.jar beschädigt, nachdem eine Reihe von Dateien ersetzt wurden. Das Zurücksetzen auf das Original löste das Problem.

NeeK
quelle
1
Hey @ Neek Willkommen beim Stapelüberlauf. Bitte geben Sie eine Antwort auf die neue Frage. Diese Frage hat bereits mehr als 4 Antworten akzeptiert. Konzentrieren Sie sich also bitte auf diesen Teil.
Dilip
2
Sicher! Alle oben akzeptierten Antworten haben mir nicht geholfen, also habe ich gesagt, was mir geholfen hat.
NeeK
1

Ich habe dieses Problem mit dem nächsten Fix behoben (vielleicht hilft es jemandem):

Überprüfen Sie einfach, ob die übergeordneten Ordner Ihres Projektordners Namen mit Leerzeichen oder anderen verbotenen Zeichen enthalten. Wenn ja - entfernen Sie es.

"C: \ Users \ someuser \ Test Projects \ testProj" - in diesem Fall sollte "Test Projects" "TestProjects" sein.

Ihor Khomiak
quelle
1

Auf Gradle 5.x verwende ich:

wrapper {
    gradleVersion = '5.5.1'
}
Guilherme Biff Zarelli
quelle
0

In meinem Fall hatte ich gradlew und gradle Ordner aus dem Projekt entfernt. Führen Sie saubere Build-Aufgaben über "Gradle-Aufgabe ausführen" im Gradle-Projektfenster in Intellij erneut aus

Geben Sie hier die Bildbeschreibung ein

Saurabh
quelle
0

Wenn es sich um ein neues Projekt handelt, entfernen Sie den vorhandenen Ordner und führen Sie $ npm install -g react-native-cli aus

Überprüfen Sie, ob der Vorgang fehlerfrei ausgeführt wird

Weinstock
quelle