Каждое второе выполнение JUnit 5 тестов проекта maven в Eclipse приводит к «Не найдено ни одного теста с бегуном JUnit 5» - PullRequest
2 голосов
/ 30 октября 2019

У меня проблема с выполнением конфигурации запуска JUnit 5 в eclipse. Проект, в котором находится исходный код, а также тестовый код, является проектом maven. Конфигурация запуска, кажется, настроена правильно, потому что сразу после сборки тесты выполняются без проблем. Если я выполняю ту же конфигурацию запуска во второй раз, это приводит к вышеупомянутой ошибке, приводящей к следующей трассировке стека в окне консоли:

 java.lang.NoClassDefFoundError: org/junit/platform/commons/util/Preconditions
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:83)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:67)
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:34)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:370)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:365)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:309)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:224)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:208)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.commons.util.Preconditions
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 13 more

Последующее выполнение конфигурации запуска снова будет работать правильно. Это продолжается и продолжается - одно выполнение работает нормально, последующее - неудачно. Как вы можете себе представить, это довольно раздражающая ситуация.

Я проследил проблему немного глубже и могу сказать, что данная трассировка стека показывает только симптом, а не основную причину. Предусловия класса присутствуют в локальном репозитории maven (в пакете junit-platform-commons), и этот пакет является частью рекурсивных зависимостей maven.

Насколько я мог определить проблему, пути к классам URLClassLoadersнеправильно установлены в случае ошибки.

В рабочем случае я вижу два ClassLoaders - один, содержащий пути для jav-файлов времени выполнения, а второй - мой jar-файл проекта и все jav-файлы зависимостей maven в локальном репозитории .m2.

В случае сбоя я снова вижу два ClassLoaders - первый снова с путями для среды выполнения Java, но второй содержит мой проект jar и вместо моих зависимостей maven только некоторые пути к

eclipse/configuration/org.eclipse.osgi/1135/0/.cp/
eclipse/configuration/org.eclipse.osgi/1137/0/.cp/
eclipse/configuration/org.eclipse.osgi/1373/0/.cp/
eclipse/configuration/org.eclipse.osgi/1138/0/.cp/lib/javaagent-shaded.jar

Насколько я понимаю, настройка пути к классам в конфигурации запуска немедленно влияет на пути в этих URLClassLoaders. Но в моем случае это, кажется, нарушается при каждом втором выполнении.

Кто-нибудь наблюдал такое же поведение, или даже лучше, если у меня есть решение или подсказка, как решить эту проблему?

С нетерпением ждуВаша помощь, Фрэнк

среда:Eclipse IDE для разработчиков JavaВерсия: 2019-09 R (4.13.0)Идентификатор сборки: 20190917-1200Все плагины обновлены.

...