No se pudo encontrar o cargar la clase principal org.gradle.wrapper.GradleWrapperMain

166

Limpié todo el proyecto mediante la supresión de los directorios locales como ~/.gradle, ~/.m2 ~./androidy ~/workspace/project/.gradle, y eligiendo File -> Invalidate Caches / Restart...en Android Studio. Ahora la ejecución del comando ./gradlewconduce a la siguiente salida:

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

Huelga decir que eliminé demasiado, la pregunta es ¿cómo se puede reparar nuevamente? ¿Tienes alguna idea de cómo solucionar esto?

SePröbläm
fuente
44
Debería poder ejecutar gradle wrappernuevamente para regenerar el código faltante ... esto se supone que no tiene una configuración de control de fuente.
cjstehno
¿Tiene instalado Gradle en su máquina? Puede intentar invocar gradle regular en lugar de gradlew, probablemente también debería restaurar el envoltorio de gradle.
RaGe

Respuestas:

134

Falta su envoltorio de gradle, está roto o dañado.

Qué es gradle wrapper:
gradlew es el ejecutable de gradle wrapper: script por lotes en Windows y script de shell en otros lugares. Cuando se invoca el script de contenedor, descarga la versión gradle definida y la ejecuta. Al distribuir el contenedor con su proyecto, cualquiera puede trabajar con él sin necesidad de instalar Gradle de antemano. Aún mejor, los usuarios de la compilación tienen garantizado el uso de la versión de Gradle para la cual fue diseñada la compilación.

Restauración de gradle wrapper:
solía ser necesario agregar una wrappertarea a su build.gradle para restaurar gradle wrapper y todas sus dependencias. Por ejemplo:

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

Las versiones más nuevas de gradle no requieren esto. Ahora es una tarea incorporada. Solo corre:

gradle wrapper

También puede proporcionar indicadores adicionales para especificar versiones, etc.

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

Cuando ejecuta esta tarea, se agrega un script de envoltura de gradle y los archivos jar necesarios a sus carpetas de origen. Las propiedades se almacenan en gradle / wrapper / gradle-wrapper.properties

(Es posible que necesite instalar gradle localmente para ejecutar esto. brew install gradleEn Mac, por ejemplo. Consulte las instrucciones más detalladas aquí )

¿Por qué faltaba en primer lugar?
OP parece haber eliminado algo de lo que depende el envoltorio de gradle.

Pero una razón común es que una entrada .gitignore evita que los frascos de envoltura se registren en git. Tenga en cuenta que el .gitignore en efecto puede estar en la carpeta de origen, o global en la carpeta de inicio de su usuario o en la configuración global de git. Es común tener una *.jarentrada en .gitignore.

Puede agregar una excepción para los archivos jar de gradlew en .gitignore

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

o forzar agregar el frasco de envoltura en git

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

ref: Gradle Wrapper

Rabia
fuente
1
¡Muchas gracias!
SePröbläm
8
Otra posible causa de este error es que el archivo gradle / wrapper / gradle-wrapper.jar no sea ejecutable, por ejemplo, si copió archivos de Windows ...
2015
Tuve este caso y eventualmente ejecuté gradlew.bat sin argumentos. No sé por qué, pero vale la pena intentarlo.
Alwyn Schoeman
207

Además de la respuesta de @ RaGe, puede ser la situación a la que me enfrenté cuando tuve un error global que ignoraba los .jararchivos y, por lo tanto, el contenedor de gradle wrapper nunca se comprometió. Por lo tanto, recibí ese error en el servidor Jenkins después de un intento /var/lib/jenkins/my_project/gradlew build. Tuve que forzar explícitamente una adición del jar y luego confirmar:

git add -f gradle/wrapper/gradle-wrapper.jar
HankCa
fuente
17
Este fue de hecho el problema. No me di cuenta de que tenía un .gitignore global.
amey91
1
Buena esa. Este también fue el caso conmigo.
Brendan
Este fue exactamente mi problema ... ¡Gracias amigo!
theyCallMeJun
Estoy trabajando en CI / CD en GitHub Actions y esto fue todo para mí. ¡Gracias!
Andi
43

Lo que funcionó para mí es correr primero:

 gradle wrapper

Después de una construcción exitosa pude ejecutar

./gradlew assembleRelease

Nota: Para poder ejecutar la gradle wrapperprimera ejecución brew install gradle. Si la instalación se ejecuta correctamente gradle wrapperdesde la raíz del proyecto.

Fuente y agradecimientos: http://gradle.org/docs/current/userguide/gradle_wrapper.html y https://stackoverflow.com/users/745574/rage

niklasingvar
fuente
1
En caso de que este comando no funcione, en AS hay un panel de Gradle en el lado derecho. ClickGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
Trabajando para mi
negrotico19
Sí, tuve el mismo problema en el proyecto springBoot en IntelliJ IDE, esta sugerencia resolvió el problema. Gracias @niklasingvar
Ermias K
41

En mi caso, era global .gitignore, como se explica en la respuesta de @ HankCa .

En lugar de agregar a la fuerza el jar, que deberá recordar hacer en cada proyecto de Gradle, agregué una anulación para volver a incluir el contenedor en mi global .gitignore:

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

Esto es útil para mí, ya que tengo muchos proyectos que usan Gradle; Git ahora me recordará que incluya el tarro de envoltura.

Esta anulación funcionará siempre que no se ignoren los directorios anteriores gradle-wrapper.jar(como gradley wrapper); git no descenderá a los directorios ignorados por razones de rendimiento .

Alex Palmer
fuente
Sí, este es el mismo problema en mi caso
silencioso
22

En mi caso, wrapperomití la subcarpeta mientras copiaba la gradlecarpeta y obtuve el mismo error.

No se pudo encontrar o cargar la clase principal org.gradle.wrapper.GradleWrapperMain

asegúrese de tener la estructura de carpetas correcta si copia el contenedor desde otra ubicación.

├── build.gradle
├── gradle
│ └── envoltura
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
yantaq
fuente
¿Por qué copiarías envoltura? Simplemente ejecutar gradle wrapperle dará exactamente el mismo resultado;)
Xerus
@ Xerus, en algunos entornos corporativos hay restricciones de red que no puede descargar libremente paquetes. en este caso tienes que copiar / mover.
yantaq
8

Probablemente le falte el gradle-wrapper.jararchivo en el directorio gradle/wrapperde su proyecto.

Debe generar este archivo a través de este script en el archivo build.gradle como se muestra a continuación,

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

y ejecutar tarea:

gradle wrapper

Con Gradle 2.4 (o superior) puede configurar un contenedor sin agregar una tarea dedicada:

gradle wrapper --gradle-version 2.3

O

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

Todos los detalles se pueden encontrar en este enlace

Luna Kong
fuente
Muchos errores en Windows 10 para "gradle wrapper --gradle-distribution-url myEnterpriseRepository: 7070 / gradle / distributions / ... "
Amor y paz - Joe Codeswell
Sí, al problema le falta el contenido de gradle/wrapperdir. Esto puede remediarse ejecutando lo gralde wrapperque ha indicado.
Yuri
En caso de que este comando no funcione, en AS hay un panel de Gradle en el lado derecho. ClickGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
4

también puede copiar gradlew.bat en su carpeta raíz y copiar el gradlew-wrapper en la carpeta gradlew.

Eso es trabajo para mí.

Chico
fuente
4

Seguí las respuestas de arriba cuando me encontré con esto. Y si tiene este problema, asegúrese de forzar la inserción de los archivos jar y de propiedades. Después de estos dos, dejé de tener este problema.

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

En mi caso (usando Windows 10) gradlew.bat tiene las siguientes líneas de código en:

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

La variable APP_HOME es esencialmente una carpeta raíz graduada para el proyecto, por lo tanto, si esto se complica de alguna manera, obtendrá:

Error: no se pudo encontrar o cargar la clase principal org.gradle.wrapper.GradleWrapperMain

Para mí, esto se había estropeado porque la estructura de la carpeta de mi proyecto tenía un ampersand (&). Por ejemplo, C: \ Test & Dev \ MyProject

Entonces, Gradel estaba tratando de encontrar el archivo gradle-wrapper.jar en una carpeta raíz de C: \ Test (quitando todo después e incluyendo el '&')

Encontré esto agregando la siguiente línea debajo del conjunto APP_HOME =% DIRNAME% línea arriba. Luego ejecutó el archivo bat para ver el resultado.

echo "%APP_HOME%"

Habrá algunos otros 'caracteres especiales' que podrían romper una ruta / directorio.

Neil Watson
fuente
2

Vi el mismo error pero en mi caso fue una instalación nueva de Git sin LFS instalado. El repositorio en cuestión se configuró con LFS y gradle-wrapper.jar estaba en LFS, por lo que solo contenía un puntero al servidor LFS. La solución era simple, solo ejecuta:

git lfs install

Y un clon nuevo hizo el truco. Supongo que git lfs pullo simplemente git pullpodría haber ayudado también, pero la persona con el problema decidió hacer un clon nuevo.

cb2
fuente
1

@HankCa resolvió el problema en mi caso también. Decidí cambiar mis **/*.jarignorantes peligrosos por otros que se explican por sí mismos, como src/**/lib/*.jarevitar estos problemas en el futuro. Ignorar si comienza con ** / * es un poco demasiado peligroso, al menos para mí. Y siempre es una buena idea tener la idea detrás de una fila .gitignore con solo mirarla.


fuente
1

En mi caso, gradle-wrapper.jar se corrompió después de reemplazar un montón de archivos. Volviendo al original resolvió el problema.

NeeK
fuente
1
Hola @ Neek Bienvenido al desbordamiento de pila, por favor responda la nueva pregunta. Esta pregunta ya tiene más de 4 respuestas aceptadas, así que concéntrese en esa parte.
Dilip
2
¡Por supuesto! Todas las respuestas aceptadas anteriormente no me ayudaron, así que puse lo que me ayudó.
NeeK
1

Solucioné este problema con la próxima solución (tal vez ayude a alguien):

Simplemente verifique si las carpetas principales de la carpeta de su proyecto tienen nombres con espacios u otros caracteres prohibidos. En caso afirmativo, quítelo.

"C: \ Users \ someuser \ Test Projects \ testProj": en este caso, "Test Projects" debería ser "TestProjects".

Ihor Khomiak
fuente
1

En Gradle 5.x yo uso:

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

En mi caso, había eliminado gradlew y gradle carpetas del proyecto. Vuelva a limpiar las tareas de compilación a través de "Ejecutar tarea Gradle" desde la ventana Proyectos Gradle en intellij

ingrese la descripción de la imagen aquí

Saurabh
fuente
0

si es un proyecto nuevo, elimine la carpeta existente y ejecute $ npm install -g react-native-cli

compruebe que se ejecuta sin ningún error

viña
fuente