Impossible de trouver ou de charger la classe principale org.gradle.wrapper.GradleWrapperMain

166

J'ai nettoyé l'ensemble du projet en supprimant les répertoires locaux comme ~/.gradle, ~/.m2 ~./androidet ~/workspace/project/.gradleet en choisissant File -> Invalidate Caches / Restart...dans Android Studio. Maintenant, l'exécution de la commande ./gradlewconduit à la sortie suivante:

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

Inutile de dire que j'ai trop supprimé, la question est de savoir comment peut-il être réparé à nouveau? Avez-vous des idées pour résoudre ce problème?

SePröbläm
la source
4
Vous devriez pouvoir exécuter à gradle wrappernouveau pour régénérer le code manquant ... cela suppose que vous n'avez aucune configuration de contrôle de source.
cjstehno
Avez-vous installé gradle sur votre machine? Vous pouvez essayer d'appeler gradle normal au lieu de gradlew, cela devrait probablement restaurer le wrapper gradle également.
RaGe

Réponses:

136

Votre wrapper Gradle est manquant, cassé ou corrompu.

Qu'est-ce que le wrapper gradle:
gradlew est l'exécutable du wrapper gradle - script batch sur Windows et script shell ailleurs. Le script wrapper, lorsqu'il est appelé, télécharge la version de gradle définie et l'exécute. En distribuant le wrapper avec votre projet, n'importe qui peut travailler avec lui sans avoir à installer Gradle au préalable. Mieux encore, les utilisateurs de la build ont la garantie d'utiliser la version de Gradle avec laquelle la build a été conçue pour fonctionner.

Restauration du wrapper gradle: Auparavant,
vous deviez ajouter une wrappertâche à votre build.gradle pour restaurer le wrapper gradle et toutes ses dépendances. Par exemple:

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

Les nouvelles versions de gradle n'en ont pas besoin. C'est maintenant une tâche intégrée. Exécutez simplement:

gradle wrapper

Vous pouvez également fournir des indicateurs supplémentaires pour spécifier les versions, etc.

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

Lorsque vous exécutez cette tâche, un script d'encapsuleur gradle et les fichiers jar requis sont ajoutés à vos dossiers source. Les propriétés sont stockées dans gradle / wrapper / gradle-wrapper.properties

(Vous devrez peut-être installer gradle localement pour l'exécuter. brew install gradleSur mac par exemple. Consultez des instructions plus détaillées ici )

Pourquoi manquait-il en premier lieu?
OP semble avoir supprimé quelque chose dont le wrapper gradle dépend.

Mais une raison courante est qu'une entrée .gitignore empêche les jars wrapper d'être vérifiés dans git. Notez que le .gitignore en vigueur peut être dans le dossier source, ou un fichier global dans votre dossier de base utilisateur ou dans la configuration globale git. Il est courant d'avoir une *.jarentrée dans .gitignore.

Vous pouvez ajouter une exception pour les fichiers jar de gradlew dans .gitignore

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

ou forcez l'ajout du jar wrapper dans git

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

réf: Gradle Wrapper

Rage
la source
1
Merci beaucoup!
SePröbläm
8
Une autre cause possible de cette erreur est que le fichier gradle / wrapper / gradle-wrapper.jar n'est pas exécutable, par exemple si vous avez copié des fichiers à partir de Windows ...
centic
J'ai eu ce cas et j'ai finalement exécuté gradlew.bat sans argument. Je ne sais pas pourquoi, mais ça vaut le coup d'essayer.
Alwyn Schoeman
207

En plus de la réponse de @ RaGe, il y a peut-être la situation à laquelle j'ai été confrontée où j'ai eu un git ignore global qui ignorait les .jarfichiers et donc le jar du wrapper gradle n'était jamais validé. Ainsi, j'obtenais cette erreur sur le serveur Jenkins après une tentative /var/lib/jenkins/my_project/gradlew build. J'ai dû explicitement forcer un ajout du fichier jar puis commettre:

git add -f gradle/wrapper/gradle-wrapper.jar
HankCa
la source
17
C'était en effet le problème. Je ne savais pas que j'avais un .gitignore global.
amey91
1
Joli. C'était aussi le cas avec moi.
Brendan
C'était exactement mon problème ... Merci mon pote!
theyCallMeJun
Je travaille sur CI / CD dans GitHub Actions et c'était tout pour moi. Je vous remercie!
Andi
43

Ce qui a fonctionné pour moi, c'est de commencer par courir:

 gradle wrapper

Après une construction réussie, j'ai pu courir

./gradlew assembleRelease

Remarque: pour pouvoir exécuter la gradle wrapperpremière exécution brew install gradle. Si l'installation réussit, exécutez à gradle wrapperpartir de la racine du projet.

Source et merci: http://gradle.org/docs/current/userguide/gradle_wrapper.html et https://stackoverflow.com/users/745574/rage

Niklasingvar
la source
1
Dans le cas où cette commande ne fonctionne pas, sur AS il y a le panneau Gradle sur le côté droit. ClickGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
Travailler pour moi.
negrotico19
Oui, j'ai eu le même problème sur le projet springBoot sur IntelliJ IDE, cette suggestion a résolu le problème. Merci @niklasingvar
Ermias K
41

Dans mon cas, c'était un global .gitignore, comme expliqué dans la réponse de @ HankCa .

Au lieu d'ajouter de force le jar, ce que vous devrez vous rappeler de faire dans chaque projet Gradle, j'ai ajouté un remplacement pour ré-inclure le jar wrapper dans mon global .gitignore:

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

Cela m'est utile car j'ai de nombreux projets qui utilisent Gradle; Git va maintenant me rappeler d'inclure le jar wrapper.

Ce remplacement fonctionnera tant qu'aucun répertoire ci-dessus gradle-wrapper.jar(tel que gradleet wrapper) n'est ignoré - git ne descendra pas dans les répertoires ignorés pour des raisons de performances .

Alex Palmer
la source
Oui, c'est le même problème dans mon cas
silentsudo
22

Dans mon cas, j'ai laissé de côté le wrappersous-dossier lors de la copie du gradledossier et j'ai eu la même erreur.

Impossible de trouver ou de charger la classe principale org.gradle.wrapper.GradleWrapperMain

assurez-vous d'avoir la bonne structure de dossiers si vous copiez l'encapsuleur à partir d'un autre emplacement.

├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
yantaq
la source
Pourquoi copieriez-vous le wrapper? L'exécution simple gradle wrappervous donnera exactement le même résultat;)
Xerus
@Xerus, dans certains environnements d'entreprise, il existe des restrictions réseau qui vous interdisent de télécharger librement des packages. dans ce cas, vous devez copier / déplacer.
yantaq le
8

Il vous manque probablement un gradle-wrapper.jarfichier sous le répertoire gradle/wrapperde votre projet.

Vous devez générer ce fichier via ce script dans le fichier build.gradle comme ci-dessous,

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

et exécutez la tâche:

gradle wrapper

Avec gradle 2.4 (ou supérieur), vous pouvez configurer un wrapper sans ajouter de tâche dédiée:

gradle wrapper --gradle-version 2.3

OU

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

Tous les détails se trouvent sur ce lien

Luna Kong
la source
Beaucoup d'erreurs sur Windows 10 pour "Gradle wrapper --gradle-distribution-url myEnterpriseRepository: 7070 / gradle / distributions /… "
Love and peace - Joe Codeswell
Oui, le problème manque le contenu de gradle/wrapperdir. Cela peut être résolu en exécutant le gralde wrappercomme vous l'avez indiqué.
Yuri
Dans le cas où cette commande ne fonctionne pas, sur AS il y a le panneau Gradle sur le côté droit. ClickGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
4

vous pouvez également copier le gradlew.bat dans votre dossier racine et copier le gradlew-wrapper dans le dossier gradlew.

c'est du travail pour moi.

Gars
la source
4

J'ai suivi les réponses d'en haut quand je suis tombé sur ça. Et si vous rencontrez ce problème, assurez-vous de forcer le transfert des fichiers jar et de propriétés. Après ces deux, j'ai arrêté de recevoir ce problème.

git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
José Peralez
la source
3

Dans mon cas (en utilisant Windows 10), gradlew.bat contient les lignes de code suivantes:

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

La variable APP_HOME est essentiellement le dossier racine des gradles pour le projet, donc, si cela est gâché d'une manière ou d'une autre, vous obtiendrez:

Erreur: impossible de trouver ou de charger la classe principale org.gradle.wrapper.GradleWrapperMain

Pour moi, cela avait été gâché parce que la structure de mon dossier de projet contenait une esperluette (&). Par exemple, C: \ Test & Dev \ MyProject

Ainsi, gradel essayait de trouver le fichier gradle-wrapper.jar dans un dossier racine de C: \ Test (en supprimant tout après et y compris le '&')

J'ai trouvé cela en ajoutant la ligne suivante sous la ligne set APP_HOME =% DIRNAME% ci-dessus. Ensuite, exécutez le fichier bat pour voir le résultat.

echo "%APP_HOME%"

Il y aura quelques autres «caractères spéciaux» qui pourraient casser un chemin / répertoire.

Neil Watson
la source
2

J'ai vu la même erreur mais dans mon cas, il s'agissait d'une nouvelle installation de Git sans LFS installé. Le dépôt en question a été configuré avec LFS et le gradle-wrapper.jar était dans LFS, il ne contenait donc qu'un pointeur vers le serveur LFS. La solution était simple, il suffit d'exécuter:

git lfs install

Et un clone frais a fait l'affaire. Je suppose que git lfs pullou juste un git pullaurait pu aider aussi mais la personne avec le problème a décidé de faire un nouveau clone à la place.

cb2
la source
1

@HankCa a également résolu le problème dans mon cas. J'ai décidé de changer mes **/*.jarignores dangereux en des ignorants explicites, comme src/**/lib/*.jarpour éviter de tels problèmes à l'avenir. Ignorer commençant par ** / * est un peu trop dangereux, du moins pour moi. Et c'est toujours une bonne idée d'obtenir l'idée derrière une ligne .gitignore simplement en la regardant.


la source
1

Dans mon cas, gradle-wrapper.jar a été corrompu après avoir remplacé un tas de fichiers. Le retour à l'original a résolu le problème.

NeeK
la source
1
Hey @ Neek Bienvenue dans Stack overflow, veuillez donner une réponse à la nouvelle question, cette question a déjà plus de 4 réponses acceptées, alors concentrez-vous sur cette partie.
Dilip
2
Sûr! toutes les réponses acceptées ci-dessus ne m'ont pas aidé alors j'ai mis ce qui m'a aidé.
NeeK
1

J'ai résolu ce problème avec le prochain correctif (peut-être que cela aidera quelqu'un):

Vérifiez simplement si les dossiers parents de votre dossier de projet ont des noms avec des espaces ou d'autres caractères interdits. Si oui, supprimez-le.

"C: \ Users \ someuser \ Test Projects \ testProj" - dans ce cas, "Test Projects" doit être "TestProjects".

Ihor Khomiak
la source
1

Sur Gradle 5.x j'utilise:

wrapper {
    gradleVersion = '5.5.1'
}
Guilherme Biff Zarelli
la source
0

Dans mon cas, j'avais supprimé les dossiers gradlew et gradle du projet. Reran nettoyer les tâches de construction via "Exécuter la tâche Gradle" de la fenêtre Projets Gradle dans intellij

entrez la description de l'image ici

Saurabh
la source
0

s'il s'agit d'un nouveau projet, supprimez le dossier existant et exécutez $ npm install -g react-native-cli

vérifier qui fonctionne sans aucune erreur

vigne
la source