Spring Boot가 maven-surefire-plugin ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter를 실행하지 못합니다.
Spring Boot 2.0.2.RELEASE 애플리케이션 (웹 종속성이있는 웹 이니셜 라이저에 의해 생성됨 )의 maven (3.5.2) 빌드를 실행하면 maven-surefire-plugin 실행에 실패합니다 .
오류 : 주 클래스 org.apache.maven.surefire.booter.ForkedBooter를 찾거나로드 할 수 없습니다.
원인 : java.lang. ClassNotFoundException : org.apache.maven.surefire.booter. ForkedBooter
왜 이런 일이 발생합니까? 부팅 + 확실한 통합 = 버그 문제입니까?
참고로 관련성이있는 것으로 보이는 종속성은 다음과 같습니다.
<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>
이 문제에 대한 해결 방법은 Spring Boot의 maven-surefire-plugin
정의 를 재정의 useSystemClassLoader
하고 false
. 자세한 내용은 Surefire 문서 읽기
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</build>
<useSystemClassLoader>false</useSystemClassLoader>
jediz에 의해 provideded 솔루션은 내 확실한 테스트를 실행할 수 있습니다, 그러나 나의 봄 부트 통합 테스트의 일부에 파산 클래스 로딩 않았다.
다음 maven-surefire-plugin 구성이 저에게 효과적이었습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
</configuration>
</plugin>
나에게 해결책은 mvn을 다음과 같이 실행하는 것이 었습니다.
_JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true mvn clean compile package
다른 아이디어 (받는다는 인수 목록에 시스템 속성을주고는 다른 변화는 pom.xml
, settings.xml
) 작동하지 않았다.
정확한 솔루션이 포함되어 있지 않았음에도 불구 하고이 답변 은 Ubuntu JDK 및 Maven Surefire 플러그인에서 두 개의 독립적이고 무해한 버그의 불행한 협력이라는 점을 분명히하는 데 매우 도움이되었습니다.
Recent Debian (buster) with the same JDK and Maven versions doesn't seem affected by the problem, but Ubuntu (xenial) did.
The exact solution is coming from this answer.
Updating the maven-surefire-plugin from 2.12.4 to 3.0.0-M1 worked for me. The project did not explicitly use the plugin, so I had to add a new plugin dependency.
<plugins>
...
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
...
</plugins>
I was able to remove the maven-surefire-plugin from my POM after adding this to the top of my POM (inside the <project>
node)
<prerequisites>
<maven>3.6.1</maven>
</prerequisites>
Why do I think this is the right answer?
- It specifies the version of Maven that Maven recommends using: https://maven.apache.org/download.cgi
- when you run
mvn versions:display-plugin-updates
it shows that it's taking the maven-surefire-plugin 3.0.0-M3 from super-pom, which so far seems to have this issue fixed. - You don't have to manage individual plugin versions independently going forward. Just your minimum maven version which controls the super-pom version.
ReferenceURL : https://stackoverflow.com/questions/50661648/spring-boot-fails-to-run-maven-surefire-plugin-classnotfoundexception-org-apache
'development' 카테고리의 다른 글
Java mapping: Selma vs MapStruct (0) | 2021.01.09 |
---|---|
스트림을 재사용 할 수있는 방법이 있습니까? (0) | 2021.01.09 |
Flexbox 항목 사이의 간격 (0) | 2021.01.08 |
R + 빛나는 어떤 망치? (0) | 2021.01.08 |
Eclipse가 문서 맨 아래를 스크롤하도록하려면 어떻게해야합니까? (0) | 2021.01.08 |