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.