스프링 부팅이 maven-surefire-plugin ClassNotFoundException org.apache.maven을 실행할 수 없습니다.확실해요.booter.ForkedBooter
Spring Boot 2.0.2의 maven(3.5.2) 빌드를 실행합니다.RELEASE 어플리케이션(Web 의존관계를 가진 Web 이니셜라이저에 의해 생성됨)은 maven-surefire-plugin 실행에 실패하고 다음과 같이 표시됩니다.
오류: 주 클래스 org.apache.maven을 찾거나 로드할 수 없습니다.확실해요.booter.ForkedBooter
원인: java.lang.ClassNotFoundException: org.apache.maven.확실해요.booter.ForkedBooter
왜 이런 일이 생기는 건가요?부팅 + Surefire Integration = 버그에 문제가 있습니까?
참고로 관련성이 있다고 생각되는 의존관계는 다음과 같습니다.
<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가 제공한 솔루션은 확실한 테스트를 실행할 수 있었지만 일부 스프링 부트 통합 테스트에서 클래스 로딩이 중단되었습니다.
다음과 같은 maven-sure-fire-plugin 구성을 사용할 수 있었습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
</configuration>
</plugin>
이는 Maven Surefire 플러그인의 알려진 버그로 인해 발생합니다.2018년 11월에 출시된 3.0.0-M1 버전에서 수정되었습니다.따라서 가장 간단하고 신뢰성 높은 수정은 사용하는 플러그인의 버전을 업그레이드하는 것입니다.
저는 maven-sure-fire-plugin을 2.12.4에서 3.0.0-M1로 업데이트한 것이 효과가 있었습니다.프로젝트에서 플러그인을 명시적으로 사용하지 않았기 때문에 새 플러그인 종속성을 추가해야 했습니다.
<plugins>
...
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
...
</plugins>
나에게 해결책은 mvn을 실행시키는 것이었다.
_JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true mvn clean compile package
기타 아이디어(시스템 속성을 maven 인수 목록에 제공, 다른 변경 사항)pom.xml
,settings.xml
)는 동작하지 않았다.
이 답변은 정확한 솔루션을 포함하고 있지 않지만, Ubuntu JDK와 Maven Surefire Plugin의 2개의 독립된 단독 무해한 버그에 의한 유감스러운 협력이라는 점을 명확히 하는 데 큰 도움이 되었습니다.
JDK와 Maven 버전이 같은 최근의 Debian(버스터)은 이 문제에 영향을 받지 않는 것 같습니다만, Ubuntu(xenial)는 영향을 받았습니다.
정확한 해결책은 이 답변에서 나온다.
미래로부터의 갱신: Debian Buster는 모든 것이 정상이며, 이 회피책은 더 이상 필요하지 않습니다.
이것을 POM의 상부에 추가한 후에, maven surefire-plugin을 POM에서 삭제할 수 있었습니다(내부).<project>
노드)의 디세이블랙아웃)
<prerequisites>
<maven>3.6.3</maven>
</prerequisites>
왜 이게 정답이라고 생각하죠?
- Maven이 사용할 것을 권장하는 Maven 버전을 지정합니다.https://maven.apache.org/download.cgi
- 「」를 선택합니다.
mvn versions:display-plugin-updates
Super-pom maven-sure-fire-plugin 3.0.0-M3 입니다.이 문제는 해결된 것 같습니다. - 향후 개별 플러그인 버전을 개별적으로 관리할 필요는 없습니다.슈퍼폼 버전을 제어하는 최소 메이븐 버전입니다.
이것을 maven-sure-fire 플러그인에 추가하여 문제를 해결했습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
</configuration>
</plugin>
언급URL : https://stackoverflow.com/questions/50661648/spring-boot-fails-to-run-maven-surefire-plugin-classnotfoundexception-org-apache
'programing' 카테고리의 다른 글
[ Typescript ]에서 유형과 인터페이스의 차이점은 무엇입니까? (0) | 2023.04.06 |
---|---|
마음에 드는 SQL*Plus 힌트 및 요령 (0) | 2023.04.06 |
Word Press:검색 결과에서 $wp_query의 모든 게시물을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.06 |
Visual Studio 코드: 파일 중첩에서 .js.map 파일을 숨깁니다. (0) | 2023.04.06 |
신속한 JSON 생성 (0) | 2023.04.06 |