понедельник, 5 мая 2014 г.

Перевод проекта на maven. Магия и жизнь

Воскресным вечером перенесла проект на maven. Встретила три проблемы. Одну решила, одну - решила, но блин не понимаю как. Одну продолжаю наблюдать с безразличием.

Зачем вообще maven? Зависимости всего три. Testng, hamcrest и webdriver. Держать ссылки на jar файлы в Build Path было вполне приемлемо. Однако:

Steps to reproduce (в Eclipse)

Конвертируем проект

  • Удаляем зависимости из Build Path
  • Понадобится плагин m2e
  • Кликаем на проект -> Configure -> Convert to Maven Project и проходим визард
В итоге в корне появится файл pom.xml, куда нужно добавить зависимости.

Добавляем в POM файл зависимости

  • Все нужные библиотеки находим на http://mvnrepository.com/. В моем случае это
  • Выбираем версию, и mvnrepository подскажет код который нужно добавить в POM файл
рис 1. mavenrepository подсказывает код


Проблемы

Ошибка при сборке проекта (с решением)

После подключения новых зависимостей, при первой сборке возникла ошибка вида "Archive for required library cannot be read or is not a valid ZIP file". Применительно к случайной библиотеке.

Гугл ответил что это - баг эклипса, нужно удалить с диска злополучный jar файл и сделать Maven -> Update Project. Файл скачается снова, ошибки не будет.

Так и оказалось. Пришлось повторять несколько раз, так как ошибка повторялась несколько раз для новых файлов.

Правильное указание зависимости вебдрайвера (с решением, без понимания)

Если взять код из mvnrepository / с официального сайта:
рис 2. зависимость, как ее рекомендует прописать офсайт вебдрайвера. версия 1
Или даже так:

рис 3. зависимость, как ее рекомендует прописать офсайт вебдрайвера. версия 2


...то при запуске тестов - падение при попытке обращения к FirefoxDriver. "java.lang.NoClassDefFoundError: com/google/common/base/Function":
рис 4. печальный результат запуска


В итоге помогло взять код отсюда.
рис 6. магический код, почему работает не знаю

И на том спасибо, но... Что за шаманство?? Это та же самая зависимость от selenium-java, плюс драйвер оперы (которую не использую), плюс исключения для него.

Пробовала удалить вроде-как-ненужный кусок с оперой. Магия ломается и снова летит NoClassDefFoundError при вызове FirefoxDriver().

Я в смятении.

Запускается неправильный браузер (без решения)

После баловства с maven, тесты запускаются в дефолтном браузере системы. До баловства - запускались в недефолтном FF.

Код, запускающий браузер, не менялся:
рис 6. для протокола, как запускаю браузер

Само по себе не мешает, но еще один индикатор что я чего-то не поняла.

Итог

Работать можно. Но осадочек остался.

Upd: с момента написания поста, объяснение нашлось всему. Нет больше осадочка.

По пункту 2, Vyacheslav Klevchenya подсказал в комментариях.

По пункту 3: ложная тревога, запускался Firefox. Просто с последним обновлением он стал сам на себя не похож - не признала. "Извините, был напуган" (с)