Кодовая страница Runner-a
Сегодня столкнулся с интересной ситуацией. Всем нам знакома команда mvn clean package, которой осуществляется сборка проекта. И в том числе в процессе сборки выполняются и юнит-тесты. И у меня стал падать с ошибкой юнит-тест репозитория, где тестируется выполнение запросов к базе данных. Причем в той же самой GigaIDE тесты проходят без проблем. И здесь надо отметить вот какой момент. Я привык запускать команды maven через так называемый Runner. Если два раза подряд нажать на клавишу Ctrl, то открывается вот такое всплывающее окно:
Если начать набирать mvn, то внизу сразу выводятся подсказки с доступными командами maven, а вверху - список недавно использованных команд. Это удобно и быстро.
Далее выяснилось, что если в той же OpenIDE запустить ту же команду на сборку, но уже из терминала в нижней части экрана:
То все тесты проходят успешно.
Здесь надо отметить, что в тестовых таблицах БД у меня используются русские символы, например, в наименованиях. Собственно как и в боевой базе. Поэтому следующее, на что обратил внимание - это на сообщение Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=IBM866, которое периодически выскакивало в сообщениях:
Это сразу навело на мысль, что что-то не так с кодировками, так как везде конечно же используется UTF-8. Далее был марафон совместно с DeepSeek-ом по поиску причин и способов их устранения. Были перелопачены куча настроек в самой IDE, а также конфигурационные файлы.
Что касается причин, то прямо конкретно их выяснить не удалось. Есть конечно предположение, что под капотом используется консоль операционной системы у которой 866-я кодовая страница. И которая по каким-то причинам не перебивается настройками IDE и maven. Хотя, повторюсь, в других аналогичных IDE, я с такой проблемой не сталкивался.
Устранить получилось только прописав -Dfile.encoding=UTF-8 в настройках параметров виртуальной машины для раннера. Чтобы открыть эти настройки выбираем в меню File -> Settings, а в открывшемся окне идем по пунктам: Build, Execution, Deployment -> Build Tools -> Maven -> Runner, и в поле VM Options прописываем вышеуказанную переменную.
После этого, при запуске тестов сообщение про кодировку сохраняется, но теперь кодировка верная - UTF-8.
И в заключение, хочу отметить, что если у вас в тех же тестах используются только английские символы, то эта проблема вас не коснется. И на выводимое сообщение можно не обращать внимание.