В нашей непрерывной интеграции произошел сбой теста, поскольку новое электронное письмо, отправленное во время теста, не будет загружено.Разобравшись с проблемой и включив отладку javamail, мы обнаружили, что локально
DEBUG: getProvider (), возвращающий javax.mail.Provider [STORE, pop3s, com.sun.mail.pop3.POP3SSLStore, Oracle]
на CI
ОТЛАДКА: getProvider () протокол возврата поставщика = pop3s;type=javax.mail.Provider$Type@728749b3;класс = org.apache.geronimo.javamail.store.pop3.POP3SSLStore;vendor = Apache Software Foundation; версия = 1.0
Это то, что мы исследовали:
- Даже если вы используете одну и ту же версию SBT и другой минор Java, вы не можете полагаться на загрузку классов, чтобы вести себя одинаково
- Javamail позволяет вам принудительно устанавливать свойства для каждого класса хранилища, устанавливая
mail.pop3s.class
, можно переопределить поведение и принудительно использовать Pop3SSLStore
. - Даже с этой настройкой тема сообщения не выбирается в CI, когда мы делаем
message.getSubject
, который всегда возвращает ноль.Включение отладки javamail показывает, что ни одна команда TOP не выполняется на CI, хотя она выполняется локально.Таким образом, сообщения не извлекаются с сервера - Исключение явно всех зависимостей из "org.apache.geronimo.javamail" решает проблему
Почему следует использовать Geronimo и почемуэто портит реализацию jvm по умолчанию, которая так хорошо работает на нашей машине?