Когда я пытаюсь запустить тест junit в eclipse для проекта, созданного с помощью gradle, я получаю следующую ошибку в консоли eclipse
Error: Could not find or load main class org.eclipse.jdt.internal.junit.runner.RemoteTestRunner
Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.internal.junit.runner.RemoteTestRunner
Если я запускаю тот же тест из командной строки, используя
gradle test
все работает нормально.
Также я заметил, что если убрать следующие две зависимости:
testImplementation group: 'org.apache.tomee', name: 'openejb-cxf-rs', version: '8.0.0'
testImplementation group: 'org.apache.tomee', name: 'arquillian-tomee-embedded', version: '8.0.0'
, тесты могут быть запущены в Eclipse. Очевидно, что в какой-то момент тесты не пройдены из-за отсутствующих зависимостей.
Похоже, что в Eclipse происходит какой-то странный конфликт. Также он работал нормально до декабрьского обновления Eclipse.
Для полноты здесь приведены версии:
- gradle 6.0.1
- Eclipse 2019-12 (4.14. 0)
- Jdk 11
- Junit 4.12
Сегодня я также пытался установить более старую версию Eclipse (2019-09) и там с той же настройкой я мог просто запустить тесты.
Также я заметил следующее. Если я go Выполнить-> Выполнить конфигурации, выберите мой тестовый прогон и «Показать командную строку», я замечу, что когда что-то не работает, путь к классам записывается в файл, тогда как когда он работает, он просто записывается как командная строка. Аргументы.
Таким образом, следующее не работает:
C:\Program Files\Java\jdk-11.0.4\bin\javaw.exe -ea -Dfile.encoding=Cp1252 "@C:\projects\provisioning-service\provisioning-service-resource\.temp-ExampleTest-classpath-arg-1578480407549.txt" org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 58388 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames com.xelion.provisioning.resource.ExampleTest
Ниже приведено
C:\Program Files\Java\jdk-11.0.4\bin\javaw.exe -ea -Dfile.encoding=Cp1252 -classpath "C:\projects\provisioning-service\provisioning-service-resource\target\bin;...manymorehere" org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 58412 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames com.xelion.provisioning.resource.ExampleTest
Таким образом, основное отличие состоит в том, что в первом случае classpath оценивается из файла
C:\projects\provisioning-service\provisioning-service-resource\.temp-ExampleTest-classpath-arg-1578480407549.txt
и во втором случае выписывается
-classpath "C:\projects\provisioning-service\provisioning-service-resource\target\bin;...