development

Spring Boot가 maven-surefire-plugin ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter를 실행하지 못합니다.

big-blog 2021. 1. 9. 11:23
반응형

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

반응형