No se pudo encontrar o cargar la clase principal org.apache.maven.wrapper.MavenWrapperMain

5 minutos de lectura

avatar de usuario de hsluoyz
hsluoyz

Tengo un proyecto de arranque de primavera aquí: https://github.com/jcasbin/jcasbin-springboot-plugin. Encontré el siguiente error en Travis CI:

shell
3.43s$ ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
/home/travis/build/jcasbin/jcasbin-springboot-plugin
Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m
Error: Could not find or load main class org.apache.maven.wrapper.MavenWrapperMain
The command "eval ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V " failed. Retrying, 2 of 3.

parece que el mvnw el comando falla. Este archivo es generado por mi IDE: IntelliJ IDEA 2018.1. No sé para qué sirve y por qué falla.

Ya disparé un problema en los problemas de github de Spring Boot aquí, pero el proyecto Spring dijo que es un problema del envoltorio de Maven y me señaló aquí. No entiendo muy bien lo que significa. ¿Es un error de Maven? ¿Cómo arreglar el error entonces?

  • Tal vez eche un vistazo a Cómo crear un ejemplo mínimo, completo y verificable … Creo que nadie está dispuesto a leer y comprender su código desde cero

    – 0x1C1B

    30 de abril de 2018 a las 16:08


  • Este no es el error, debe mirar el registro de salida de maven para “mvn install”.

    – Nyamiou El Galeántropo

    30 de abril de 2018 a las 16:58

  • Posible duplicado de ¿Qué significa “No se pudo encontrar o cargar la clase principal”?

    – hsluoyz

    1 de mayo de 2018 a las 7:17

La respuesta de Phil es correcta. Y aquí está cómo crear un directorio .mvn con el jar necesario dentro.
Encontré la respuesta aquí (https://www.baeldung.com/maven-wrapper)

Si tiene maven y desea que el envoltorio de maven funcione, debe configurar el envoltorio de maven:

mvn -N io.takari:maven:wrapper

Debería crear el directorio .mvn y poner el jar necesario en él.

  • Aunque la respuesta de @PhilWebb puede ser correcta, abordó el diagnóstico pero no el remedio. Esto ayudó, aunque lo que es takari y hay un lib/paquete estándar?

    – perennial_noob

    19 de julio de 2019 a las 18:32

  • esto nos ayudó a hacer funcionar nuestra aplicación jhispter – gracias

    – Gel

    19 de febrero de 2020 a las 16:10


  • Si está en Windows, asegúrese de tener el wrapper/maven-wrapper.jar

    – heyomi

    18 de noviembre de 2021 a las 13:36

  • Puedes revisar esto: github.com/takari/maven-wrapper maven.apache.org/envoltorio “` envoltura lang-powershell mvn: envoltura “`

    – Néstor Waldyd

    19 de febrero a las 1:39


Te estás perdiendo el .mvn carpeta en su repositorio de git. Deberías tener una carpeta llamada .mvn que contiene los archivos wrapper/maven-wrapper.jar, wrapper/maven-wrapper.properties y jvm.config. Quizás te lo perdiste porque es una carpeta oculta.

Trata de hacerlo git add -f .mvn desde la línea de comando, luego confirme y empuje.

  • Tenga en cuenta que en realidad ya tenía el directorio .mvn creado y todavía tenía que hacer esto por alguna razón.

    – mslissap

    4 mayo 2021 a las 19:55

  • En mi caso, tenía el directorio .mvn pero necesitaba instalar git-lfs para poder pagar correctamente maven-wrapper.jar (de lo contrario, se reemplaza por un archivo de texto)

    – Rolintocour

    22 de septiembre de 2021 a las 14:59

Para cualquiera que use Windows y vea este error, verifique si el .mvn Los archivos de la carpeta se convirtieron a CRLF. Si es así, cambiarlos a LF probablemente solucionará su problema.

  1. Agregando a lo que Oleksii Volynskyi,

use el envoltorio oficial de maven

envoltura mvn: envoltura

en lugar de io.takari:maven:wrapper que ya no se mantiene

  1. Como mencionó Phil Webb, agregue la carpeta .mvn al repositorio de git

«No sé para qué sirve»:

Un mvnw es un contenedor maven. Básicamente, es un script que desacopla maven de su instalación local y puede agregar controles y funciones al comando mvn real; para obtener una explicación completa, consulte el documentación oficial de maven.

Para configurarlo (suponiendo que lo tenía funcionando únicamente con mvn) debería bastar con ejecutar:

    mvn wrapper:wrapper 

Y eso debería crear al menos los siguientes archivos nuevos:

    .
    ├── .mvn
    │   └── wrapper
    │       ├── maven-wrapper.jar
    │       └── maven-wrapper.properties
    ├── mvnw
    └── mvnw.cmd

Entonces, al evocar mvnw ejecutaría todo con ese maven-wrapper.jar, completamente independiente de su instalación local de maven.

Si el maven-wrapper.jar no está en su lugar después del comando, probablemente tenga un problema de red; el más común es un proxy que debe configurarse.

“Como arreglar”:

¿Cuál es el problema?

Problema de proxy:

Inicialmente, el mvn wrapper:wrapper no pude traer el maven-wrapper.jar para mi.

.
├── .mvn
│   └── wrapper
│       └── maven-wrapper.properties
├── mvnw
└── mvnw.cmd

Si te sumerges profundamente en la madriguera del conejo y compruebas el código de envolturanotará que no hay un proxy predeterminado, pero puede configurar un proxy para la máquina virtual java creando un .mvn/jvm.config archivo que contiene:

    -Dhttp.proxyHost=proxy.domain.name
    -Dhttp.proxyPort=8080
    -Dhttps.proxyHost=proxy.domain.name
    -Dhttps.proxyPort=8080 

Con eso en su lugar, simplemente vuelva a ejecutar el comando de configuración

    mvn wrapper:wrapper

buscó todo por sí mismo:

    .
    ├─ .mvn
    │  ├── jvm.config
    │  └── wrapper
    │      ├── maven-wrapper.jar
    │      └── maven-wrapper.properties
    ├── mvnw
    └── mvnw.cmd

Por ahora, ejecutando el ./mvnw clean installdebería funcionar bien, lo hizo para mí (pero solo por unos días)

Problema de clase:

Un buen día, llegué a la oficina y el mvnw estaba devolviendo el mismo error que indicaste!…

Para mí, el problema era en realidad un problema de final de línea (LF CRLF) en el jvm.config expediente.

como el mvnw script expande las opciones en un comando real el comando se estropearía con un CR dividiéndolo antes de la opción classpath. Dado que ese classpath es donde se pasa maven-wrapper.jar (que contiene MaveWrapperMain), el comando java no pudo obtener la clase.

¿Cómo lo solucioné?

Simplemente volví a crear el archivo que contenía solo LF y no CRLF.

Prima:

Como noté que este CRLF fue introducido por un usuario que estaba en una máquina con Windows, verifiqué algunos documentación de git para evitar repetir el problema, ejecutó lo siguiente y aconsejó a todos que hicieran lo mismo:

    git config --global core.autocrlf true

Espero que esto centralice los pasos que encontré dispersos y termine ahorrando tiempo a alguien.

Avatar de usuario de XSword24
XSword24

En mi caso, tenía el proyecto guardado en una carpeta cuya ruta incluía un carácter con acento (en mi caso “á”). Eliminar el acento solucionó el problema.

Avatar de usuario de Badmous
Badmous

de hecho, solo hice mvn clean install y funcionó, en realidad estoy usando una versión anterior de spring 2.0 para ser específico

¿Ha sido útil esta solución?