복붙노트

[SPRING] 스프링 부트가 maven-surefire-plugin을 실행하지 못한다. ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter

SPRING

스프링 부트가 maven-surefire-plugin을 실행하지 못한다. ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter

Spring 부트 2.0.2.RELEASE 응용 프로그램 (웹 종속성을 가진 웹 이니셜 라이저에 의해 생성 됨)의 maven (3.5.2) 빌드를 실행하면 다음과 같은 메시지가 실행되지 않습니다.

왜 이런 일이 일어나는 걸까요? 부팅 + 확실한 통합 문제 = 버그입니까?

참고로 관련성이있는 종속성은 다음과 같습니다.

<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.unitils</groupId>
        <artifactId>unitils</artifactId>
        <version>2.2</version>
        <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>

해결법

  1. ==============================

    1.이 문제의 해결 방법은 Spring Boot의 maven-surefire-plugin 정의를 무시하고 useSystemClassLoader를 false로 설정하는 것이 었습니다. 자세한 내용은 Surefire 문서를 읽으십시오.

    이 문제의 해결 방법은 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>
    
  2. ==============================

    2.jediz가 제공하는 false 솔루션은 확실한 테스트를 실행할 수있게 해주었지만 Spring Boot 통합 테스트에서 클래스로드를 위반했습니다.

    jediz가 제공하는 false 솔루션은 확실한 테스트를 실행할 수있게 해주었지만 Spring Boot 통합 테스트에서 클래스로드를 위반했습니다.

    다음의 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>
    
  3. ==============================

    3.나에게 해결책은 다음과 같이 maven을 실행하는 것이었다.

    나에게 해결책은 다음과 같이 maven을 실행하는 것이었다.

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

    다른 아이디어 (시스템 속성을 maven 인수 목록에 제공하고 pom.xml, settings.xml의 여러 변경 사항)이 작동하지 않았습니다.

    그것이 정확한 해결책을 포함하지 않았음에도 불구하고,이 대답은 우분투 JDK와 Maven Surefire Plugin에서 두 개의 독립적이고 무해한 버그의 불행한 협력이라는 것을 명확히하는 데 매우 도움이되었습니다.

    최근 JDK와 Maven 버전을 사용하는 데비안 (버스터)은 문제의 영향을받지 않았지만 Ubuntu (xenial)은 그렇게했습니다.

    정확한 해결책은이 대답에서 나옵니다.

  4. ==============================

    4.2.12.4에서 3.0.0-M1으로 maven-surefire-plugin을 업데이트하는 것이 저에게 효과적이었습니다. 프로젝트에서 플러그인을 명시 적으로 사용하지 않았으므로 새 플러그인 종속성을 추가해야했습니다.

    2.12.4에서 3.0.0-M1으로 maven-surefire-plugin을 업데이트하는 것이 저에게 효과적이었습니다. 프로젝트에서 플러그인을 명시 적으로 사용하지 않았으므로 새 플러그인 종속성을 추가해야했습니다.

      ... // 다른 플러그인         maven-surefire-plugin      3.0.0-M1      ... // 다른 플러그인

  5. from https://stackoverflow.com/questions/50661648/spring-boot-fails-to-run-maven-surefire-plugin-classnotfoundexception-org-apache by cc-by-sa and MIT license