Impossibile trovare o caricare la classe principale org.gradle.wrapper.GradleWrapperMain


166

Ho pulito l'intero progetto eliminando le directory locali come ~/.gradle, ~/.m2 ~./androided ~/workspace/project/.gradlee scegliendo File -> Invalidate Caches / Restart...in Android Studio. Ora l'esecuzione del comando ./gradlewporta al seguente output:

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

Inutile dire che ho cancellato troppo, la domanda è: come può essere riparato di nuovo? Hai qualche idea su come risolvere questo problema?


4
Dovresti essere in grado di eseguire gradle wrappernuovamente per rigenerare il codice mancante ... questo presuppone che tu non abbia alcuna configurazione di controllo del codice sorgente.
cjstehno,

Hai Gradle installato sulla tua macchina? Puoi provare a invocare il gradle normale invece del gradlew, probabilmente dovrebbe ripristinare anche il wrapper del gradle.
RaGe

Risposte:


134

Il wrapper Gradle è mancante, rotto o danneggiato.

Che cos'è Gradle Wrapper:
gradlew è l'eseguibile Gradle Wrapper: script batch su Windows e shell shell altrove. Lo script wrapper quando viene richiamato, scarica la versione gradle definita ed esegue. Distribuendo il wrapper con il tuo progetto, chiunque può lavorarci senza bisogno di installare Gradle in anticipo. Ancora meglio, agli utenti della build è garantito l'uso della versione di Gradle con cui la build è stata progettata per funzionare.

Ripristino del wrapper gradle: in
passato era necessario aggiungere wrapperun'attività a build.gradle per ripristinare il wrapper gradle e tutte le sue dipendenze. Per esempio:

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

Le versioni più recenti di Gradle non richiedono questo. Ora è un'attività integrata. Corri:

gradle wrapper

È inoltre possibile fornire flag aggiuntivi per specificare versioni ecc

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

Quando si esegue questa attività, uno script wrapper gradle e i file jar richiesti vengono aggiunti alle cartelle di origine. Le proprietà sono memorizzate in gradle / wrapper / gradle-wrapper.properties

(Potrebbe essere necessario installare Gradle localmente per eseguire questo. brew install gradleSu mac per esempio. Vedi le istruzioni più dettagliate qui )

Perché mancava in primo luogo?
OP sembra aver cancellato qualcosa da cui dipende il gradle wrapper.

Ma una ragione comune è che una voce .gitignore impedisce che i vasi wrapper vengano controllati in git. Si noti che il .gitignore in effetti potrebbe essere nella cartella di origine, o globale nella cartella home dell'utente o nella configurazione globale di git. È comune avere una *.jarvoce in .gitignore.

È possibile aggiungere un'eccezione per i file jar di gradlew in .gitignore

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

o forzare aggiungere il vasetto dell'involucro in git

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

Rif: Gradle Wrapper


1
Grazie mille!
SePröbläm,

8
Un'altra possibile causa di questo errore è che il file gradle / wrapper / gradle-wrapper.jar non sia eseguibile, ad esempio se hai copiato i file da Windows ...
Centic

Ho avuto questo caso e alla fine ho eseguito gradlew.bat senza argomenti risolto. Non so perché, ma vale la pena provare.
Alwyn Schoeman,

207

Oltre alla risposta di @ RaGe, potrebbe esserci la situazione in cui ho dovuto ignorare un git globale che ignorava i .jarfile e quindi il jar wrapper gradle non è mai stato impegnato. Quindi stavo ottenendo quell'errore sul server Jenkins dopo un tentativo /var/lib/jenkins/my_project/gradlew build. Ho dovuto forzare esplicitamente un'aggiunta del vaso e quindi eseguire il commit:

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

17
Questo era davvero il problema. Non mi rendevo conto di avere un .gitignore globale.
amey91,

1
Ben fatto. Questo è stato anche il caso con me.
Brendan,

Questo era esattamente il mio problema ... Grazie amico!
theyCallMeJun

Sto lavorando su CI / CD in GitHub Actions e questo è stato per me. Grazie!
Andi

43

Ciò che ha funzionato per me è eseguire prima:

 gradle wrapper

Dopo una compilazione riuscita sono stato in grado di eseguire

./gradlew assembleRelease

Nota: per poter eseguire la gradle wrapperprima esecuzione brew install gradle. Se l'installazione viene eseguita correttamente gradle wrapperdalla radice del progetto.

Fonte e ringraziamenti: http://gradle.org/docs/current/userguide/gradle_wrapper.html e https://stackoverflow.com/users/745574/rage


1
Nel caso in cui questo comando non funzioni, su AS è presente il pannello Gradle sul lato destro. ClickGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov,

Lavora per me.
negrotico19,

Sì, ho avuto lo stesso problema sul progetto springBoot sull'IDE IntelliJ, questo suggerimento ha risolto il problema. Grazie @niklasingvar
Ermias K

41

Nel mio caso è stato globale .gitignore, come spiegato nella risposta di @ HankCa .

Invece di aggiungere con forza il vaso, che dovrai ricordare di fare in ogni progetto Gradle, ho aggiunto una sostituzione per includere nuovamente il vaso wrapper nel mio globale .gitignore:

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

Questo mi è utile poiché ho molti progetti che usano Gradle; Git ora mi ricorderà di includere il vaso wrapper.

Questa sostituzione funzionerà finché nessuna directory sopra gradle-wrapper.jar(come gradlee wrapper) viene ignorata - git non scenderà nelle directory ignorate per motivi di prestazioni .


Sì, questo è lo stesso problema nel mio caso
silentsudo

22

Nel mio caso, ho lasciato fuori la wrappersottocartella durante la copia della gradlecartella e ho ottenuto lo stesso errore.

Impossibile trovare o caricare la classe principale org.gradle.wrapper.GradleWrapperMain

assicurati di avere la struttura delle cartelle corretta se copi il wrapper da un'altra posizione.

├── build.gradle
├── grado
│ └── involucro
Grad ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

Perché dovresti copiare wrapper? La semplice esecuzione gradle wrapperti darà lo stesso esatto risultato;)
Xerus

@Xerus, in alcuni ambienti aziendali ci sono restrizioni di rete che non è possibile scaricare liberamente i pacchetti. in questo caso devi copiare / spostare.
yantaq

8

Probabilmente ti manca il gradle-wrapper.jarfile nella directory gradle/wrapperdel tuo progetto.

Devi generare questo file tramite questo script nel file build.gradle come di seguito,

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

ed esegui attività:

gradle wrapper

Con il livello 2.4 (o superiore) è possibile impostare un wrapper senza aggiungere un'attività dedicata:

gradle wrapper --gradle-version 2.3

O

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

Tutti i dettagli possono essere trovati questo link


Molti errori su Windows 10 per "gradle wrapper --gradle-distribution-url myEnterpriseRepository: 7070 / gradle / distribututions / ... "
Amore e pace - Joe Codeswell,

Sì, al problema manca il contenuto di gradle/wrapperdir. Questo può essere risolto eseguendo gralde wrappercome indicato.
Yuri,

Nel caso in cui questo comando non funzioni, su AS è presente il pannello Gradle sul lato destro. ClickGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov,

4

puoi anche copiare gradlew.bat nella cartella principale e copiare il gradlew-wrapper nella cartella gradlew.

questo è lavoro per me.


4

Ho seguito le risposte dall'alto quando mi sono imbattuto in questo. E se stai riscontrando questo problema, assicurati di forzare il push sia del file jar che dei file delle proprietà. Dopo questi due, ho smesso di ottenere questo problema.

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

3

Nel mio caso (usando Windows 10) gradlew.bat ha le seguenti righe di codice in:

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

La variabile APP_HOME è essenzialmente la cartella principale dei gradi per il progetto, quindi, se questo viene incasinato in qualche modo, otterrai:

Errore: Impossibile trovare o caricare la classe principale org.gradle.wrapper.GradleWrapperMain

Per me, questo era stato incasinato perché la struttura della cartella del mio progetto conteneva una e commerciale (&). Ad esempio C: \ Test & Dev \ MyProject

Quindi, gradel stava cercando di trovare il file gradle-wrapper.jar in una cartella radice di C: \ Test (rimuovendo tutto dopo e includendo '&')

Ho trovato questo aggiungendo la seguente riga sotto la riga APP_HOME =% DIRNAME% sopra. Quindi ha eseguito il file bat per vedere il risultato.

echo "%APP_HOME%"

Ci saranno alcuni altri "caratteri speciali" che potrebbero spezzare un percorso / directory.


2

Ho visto lo stesso errore ma nel mio caso è stata una nuova installazione di Git senza LFS installato. Il repository in questione è stato impostato con LFS e gradle-wrapper.jar era in LFS, quindi conteneva solo un puntatore al server LFS. La soluzione era semplice, basta eseguire:

git lfs install

E un nuovo clone ha fatto il trucco. Suppongo git lfs pullche anche solo git pullavrei potuto aiutare, ma la persona con il problema ha deciso di fare un nuovo clone.


1

@HankCa ha risolto il problema anche nel mio caso. Ho deciso di cambiare i miei pericolosi **/*.jarignoranti con quelli autoesplicativi come src/**/lib/*.jarevitare tali problemi in futuro. Ignora a partire da ** / * sono un po 'troppo pericolosi, almeno per me. Ed è sempre una buona idea avere l'idea dietro una riga .gitignore semplicemente guardandola.


1

Nel mio caso gradle-wrapper.jar si è corrotto dopo aver sostituito un mucchio di file. Il ripristino a quello originale ha risolto il problema.


1
Hey @ Neek Benvenuto in Stack Overflow, per favore rispondi alla nuova domanda che questa domanda ha già più di 4 risposte accettate, quindi ti preghiamo di concentrarti su quella parte.
Dilip

2
Sicuro! tutte le risposte sopra accettate non mi hanno aiutato, quindi ho messo quello che mi ha aiutato.
NeeK,

1

Ho risolto questo problema con la prossima correzione (forse aiuterà qualcuno):

Controlla solo se le cartelle principali della cartella del tuo progetto hanno nomi con spazi o altri caratteri proibiti. Se sì, rimuovilo.

"C: \ Users \ someuser \ Test Projects \ testProj" - in questo caso "Test Projects" dovrebbe essere "TestProjects".



0

Nel mio caso, avevo rimosso le cartelle gradlew e gradle dal progetto. Eseguire nuovamente le attività di compilazione pulite tramite "Esegui task gradle" dalla finestra Progetti gradle in intellij

inserisci qui la descrizione dell'immagine



0

se si tratta di un nuovo progetto, rimuovere la cartella esistente ed eseguire $ npm install -g reazioni-native-cli

controlla che venga eseguito senza errori

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.