Spring Boot не запускается maven-surefire-plugin ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter - PullRequest
0 голосов
/ 03 июня 2018

Запуск maven (3.5.2) сборки Spring Boot 2.0.2.RELEASE (генерируется веб-инициализатором с веб-зависимостями) завершается ошибкой при выполнении 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>

Ответы [ 5 ]

0 голосов
/ 30 января 2019

Мне удалось удалить плагин maven-surefire-из моего POM после добавления этого в верхнюю часть моего POM (внутри узла <project>)

<prerequisites>
    <maven>3.6.1</maven>
</prerequisites>

Почему я думаю, что этоправильный ответ?

  • Указывает версию Maven, которую Maven рекомендует использовать: https://maven.apache.org/download.cgi
  • , когда вы запускаете mvn versions:display-plugin-updates, это показывает, что он использует maven-surefire-plugin 3.0.0-M3 из super-pom, который, кажется, до сих пор исправил эту проблему.
  • Вам не нужно управлять отдельными версиями плагинов независимо друг от друга в будущем.Просто ваша минимальная версия Maven, которая управляет версией супер-помпа.
0 голосов
/ 12 ноября 2018

Для меня решение было запустить mvn как

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

Другие идеи (предоставление системного свойства списку аргументов maven, различные изменения в pom.xml, settings.xml) не работали.

Несмотря на то, что оно не содержало точного решения, также этот ответ мне очень помогло прояснить, что это неудачное сотрудничество двух независимых, безвредных ошибок вUbuntu JDK и плагин Maven Surefire.

Последний Debian (бастер) с одинаковыми версиями JDK и Maven, похоже, не подвержен этой проблеме, но Ubuntu (xenial) сделал.

точное решение исходит из этого ответа.

0 голосов
/ 31 октября 2018

Решение <useSystemClassLoader>false</useSystemClassLoader>, предоставленное jediz, позволило запустить мои верные тесты, но прервало загрузку классов в некоторых из моих тестов интеграции с 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>
0 голосов
/ 12 ноября 2018

Обновление maven-surefire-plugin с 2.12.4 до 3.0.0-M1 работало для меня.В проекте явно не использовался плагин, поэтому мне пришлось добавить новую зависимость плагина.

<plugins>
   ...
   <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>3.0.0-M1</version>
   </plugin>
   ...
</plugins>
0 голосов
/ 03 июня 2018

Обходной путь для этой проблемы - переопределить определение maven-surefire-plugin Spring Boot и установить 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>
...