воскресенье, 24 июля 2011 г.

Из каменного века в Maven

Довльно долгое время практиковал для разработки своих скромных Java-Web проектов jEdit и компиляцию из командной строки на сервере. Редактирую с Windows-компьютера, сервер под GNU/Linux.

Все файлы проекта лежат прямо под Apache Tomcat, структура папок полностью соответствует правилам развертывания. Java-классы лежат по соседству с исходными файлами. Для создания пакета нужно очистить папки от исходных файлов и упаковать все в war. Имея под рукой UNIX-shell все это можно делать довольно быстро.

В таких условиях думалось: взять один из IDE - означает компилировать на рабочем компьютере, а этого не хотелось, так как сервер мощнее. Поэтому взять автоматизатор сборки и использовать его на сервере показалось разумным.

Есть еще проблемы: для того, чтоб делать тестовую и рабочую сборки нужно проделывать еще некоторые манипуляции, например, менять конфигурационные файлы.

Вообщем, пришла пора брать автоматический сборщик, на слуху два сборщика: ant и maven. Поначалу казалось, что ant более простой, устоявшейся и для небольших проектов лучше взять его. Но, в голове осталась фраза из интервью одного из Java-разработчиков: "maven, он более идеологически правильный".

После ознакомления с информацией по обоим продуктам, стало ясно, что по-большому делают они одно и то же - автоматизируют сборку, но Maven еще поддреживает жизненный цикл сборки.

Выбор пал на Maven, так как он умеет "больше", чем ant и, как показалось, более современный.

Установка под GNU/Linux из репозитория, создание структуры Web-проекта по архитипу:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=k2 -DartifactId=my_project
весьма просто.

Дальше пришлось подстроиться по правила Maven: src/main/java содержит только java-файлы, файлы конфигурации нужно сложить, например, в "src/main/resources/conf".

Для профилирования сборок: тестовая, рабочая создаются разделы "profile" в pom.xml.
Задачи по копированию, удалению файлов делаются с помощью "maven-antrun-plugin".
Если не хотим, чтоб Maven искал и скачивал библитеку из репозиториев, то можно сделать
System Dependencies.

Для Tomcat есть "tomcat-maven-plugin", который автоматизирует развертывание.
Можно, используя "jetty-maven-plugin", запустить приложения прямо из Maven.

При разработке, после редактирования кода, вместо прямого вызова компилятора, стал вызывать:
mvn -Pdev compile
, где dev - имя профиля.
На "/target/classes" сделана символическая ссылка из под развернутого под Tomcat приложения, таким образом увидеть результаты изменений можно после компиляции и перезапуска приложения в Tomcat.ь Это занимает больше времени, чем прямая компиляция.

Итого: сборка проекта ускорилась, сам процесс разработки получил дополнительные задержки.