springframework run repackage plugin org mvn generate failed spring maven spring-boot maven-surefire-plugin

run - spring boot maven plugin generate jar



Spring Boot no ejecuta maven-surefire-plugin ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter (5)

La <useSystemClassLoader>false</useSystemClassLoader> provista por jediz permitió que se ejecutaran mis pruebas surefire, pero interrumpió la carga de clases en algunas de mis pruebas de integración Spring Boot.

La siguiente configuración de maven-surefire-plugin funcionó para mí:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine> </configuration> </plugin>

La ejecución de maven (3.5.2) compilación de una aplicación Spring Boot 2.0.2.RELEASE (generada por el inicializador web con dependencias web) falla al ejecutar el complemento maven-surefire-plugin diciendo:

Error: no se pudo encontrar o cargar la clase principal org.apache.maven.surefire.booter.ForkedBooter

Causado por: java.lang. ClassNotFoundException : org.apache.maven.surefire.booter. Bifurcador

¿Por qué está pasando esto? ¿Es un problema en la integración boot + surefire = un error?

Para referencia, las dependencias que parecen relevantes son:

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> </parent> ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ... <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>


La actualización del complemento maven-surefire de 2.12.4 a 3.0.0-M1 funcionó para mí. El proyecto no usó explícitamente el complemento, así que tuve que agregar una nueva dependencia de complemento.

<plugins> ... <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M1</version> </plugin> ... </plugins>


La solución para el problema fue anular la definición de maven-surefire-plugin Spring Boot y establecer useSystemClassLoader en false . Lee los documentos de Surefire para más detalles.

<build> <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <useSystemClassLoader>false</useSystemClassLoader> </configuration> </plugin> </plugins> </build>


Para mí, la solución fue ejecutar mvn como

_JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true mvn clean compile package

Otras ideas (dando la propiedad del sistema a la lista de argumentos de Maven, diferentes cambios en pom.xml , settings.xml ) no funcionaron.

A pesar de que no contenía la solución exacta, también esta respuesta me ayudó mucho a aclarar que es una cooperación desafortunada de dos errores independientes e independientes en el Ubuntu JDK y en el Maven Surefire Plugin.

Debian (destructor) reciente con las mismas versiones de JDK y Maven no parece afectado por el problema, pero Ubuntu (xenial) sí lo hizo.

La solución exacta viene de this respuesta.


Pude eliminar el complemento maven-surefire-plugin de mi POM después de agregar esto a la parte superior de mi POM (dentro del nodo <project> )

<prerequisites> <maven>3.6.1</maven> </prerequisites>

¿Por qué creo que esta es la respuesta correcta?

  • Especifica la versión de Maven que Maven recomienda usar: https://maven.apache.org/download.cgi
  • cuando mvn versions:display-plugin-updates muestra que está tomando maven-surefire-plugin 3.0.0-M3 de super-pom, que hasta ahora parece haber resuelto este problema.
  • No es necesario administrar versiones individuales de complementos de forma independiente a partir de ahora. Solo la versión mínima de Maven que controla la versión super-pom.