Запуск сборки maven (3.5.2) приложения Весенний ботинок 2.0.2.RELEASE (сгенерированный веб-инициализатором с веб-зависимостями) не выполняет плагин maven-surefire, говоря просто:
Error: Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter
Caused by: 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>
Да, я могу подтвердить, что решение устраняет проблему, но в чем проблема? - Ночные сборки в нашей системе CI внезапно стали красными без каких-либо изменений кода. Это проблема с Spring Boot?
@agassner, взгляни на это, я прибыл сюда по сообщению это
Как сказано в другой ответ и проблема апстрима, этот обходной путь не без проблем.
Это исправление сработало для меня, однако я получил предупреждение о том, что версия должна быть предоставлена / указана. Чтобы избежать ошибок в будущем, я рекомендую добавить его. На данный момент, кажется, самая последняя версия - <version> 2.22.1 </version>.
нужно установить версию, чтобы не получать предупреждения maven при сборке. изменить: как все еще сказано в предыдущем комментарии
@Kaspatoo версия была унаследована от загрузки Spring, что является одной из его основных функций - она должна определять совместимые версии для вашего.
Решение <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>
Как сказано в проблема апстрима, этот обходной путь - также, не без проблем ☹
Этот простой вариант решил мою проблему, которая возникла как в 1.8, так и в 11. Спасибо!
Это связано с известная ошибка в плагине Maven Surefire. Это было исправлено в версии 3.0.0-M1, которая была выпущен в ноябре 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>
Для меня решением было запустить mvn как
_JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true mvn clean compile package
Другие идеи (передача системного свойства списку аргументов maven, различные изменения в pom.xml, settings.xml) не сработали.
Несмотря на то, что он не содержал точного решения, этот ответ также был очень полезен для меня, чтобы прояснить, что это неудачное сотрудничество двух независимых, безобидных ошибок в Ubuntu JDK и Maven Surefire Plugin.
Недавний Debian (buster) с теми же версиями JDK и Maven, похоже, не затронут этой проблемой, но Ubuntu (xenial) затронул.
Точное решение исходит из ответа это.
Update from the future: with Debian Buster is alles okay and this workaround is not needed any more.
Мне удалось удалить maven-surefire-plugin из моего POM после добавления его в верхнюю часть моего POM (внутри узла <project>)
<prerequisites>
<maven>3.6.3</maven>
</prerequisites>
Почему я думаю, что это правильный ответ?
mvn versions:display-plugin-updates, он показывает, что он берет maven-surefire-plugin 3.0.0-M3 из super-pom, который до сих пор, похоже, исправил эту проблему.Я попробовал это решение и вот что у меня получилось: [WARNING] The project com.example:pom:0.0.2 uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
Я тестировал его с родителем maven 3.6.0, OpenJDK11 и Spring boot 2.1.X. Мне удалось решить проблему, используя отвечатьRvange выше.
Мне жаль, что мой ответ не сработал для вас, но рад, что вы нашли тот, который сработал! Мой ответ все еще хорошо работает для меня в нескольких проектах, поэтому я собираюсь оставить его там.
Добавив это в maven-surefire-plugin, я решил проблему:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
</configuration>
</plugin>
Добро пожаловать в SO! При ответе, пожалуйста, сделайте больше, чем просто выбросьте код. Вместо этого объясните, почему код должен быть выбранным решением. Цель состоит в том, чтобы научить ОП ловить рыбу, а не просто решить эту текущую проблему с помощью одной рыбы.
Я заметил необходимость в этом только при запуске более старой версии плагина под новой версией Java, например 11. Попробуйте вместо этого последнюю версию плагина.
проблема апстрима показывает три обходных пути (два перечисленных здесь плюс
forkCount0), но ни один из них не обходится без проблем ☹