У нас есть странная проблема. Мы используем инструмент автоматического тестирования. DSL был реализован в Scala. Система, которую мы тестируем с помощью этого инструмента, была написана на Java, а интерфейс между этими двумя компонентами - RMI. Действительно, интерфейсная часть автоматического тестового инструмента также является Java (остальное - Scala). Мы полностью контролируем исходный код этих компонентов.Sporadic java.lang.NoClassDefFoundError в Scala
У нас уже есть величина тысяч тестовых случаев. Мы выполняем эти тесты автоматически каждый раз, используя Jenkins на сервере Linux. Проблема в том, что мы спорадически получаем исключение java.lang.NoClassDefFoundError
. Обычно это происходит при попытке доступа к артефактам Java из кода Scala.
Если мы выполняем один и тот же тестовый случай вручную или проверяем результат следующего ночного запуска, то обычно проблема решается автоматически, но иногда это происходит снова в совершенно другом месте. В случае некоторых прогонов такая проблема вообще не возникает. Самая большая проблема заключается в том, что ошибка не воспроизводится; кроме того, как это бывает в случае автоматического прогона, у нас практически нет информации о конкретных обстоятельствах, просто в тестовом случае и журнале.
Неужели кто-то уже сталкивался с такой проблемой? Вы не знаете, как это сделать? Любой намек или часть информации были бы полезны не только для решения проблемы. Спасибо!
Как вы строите свои компоненты Scala и Java? Возможно, что артефакт Java иногда еще не строился, в то время как Scala-код имеет и пытается его запустить. – diginoise
Мы строим и работаем с Maven. Спасибо за подсказку!Я проверю, может ли случиться, что тестовый сценарий запущен в одном процессе, а другой процесс просто компилирует код Java. Теоретически это не должно происходить, однако теория и практика могут различаться ... –
Обязательно присоедините строитель каждого языка к соответствующей фазе сборки Maven. Вот пример использования scala-плагина: http: //davidb.github.io/scala-maven-plugin/example_java.html – diginoise