Уже давно я слышал об инструменте для автоматизации сборки проекта — Ant, но как-то не мог найти ему реального применения в проектах на PHP. Компилить вроде ничего не надо, внешние библиотеки вполне можно подключить через
Вобщем все как всегда. Какая-то подобная штука вроде бы и не помешала бы, но все и так хорошо работало и лень было изучать псевдопомогающую технологию. Так было до тех пор, пока я не познакомился с Java…
С приходом джавы в мою жизнь, взгляд на вопрос использовать или нет автоматический билдер отпала сама собой — использовать. Ведь какой фрик будет вручную компилировать все файлы по всем директориям проекта и копировать их для деплоя в каталог контейнера сервлетов? Только очень терпеливый и не ленивый человек. Но лень двигатель прогресса и я начал читать про… maven.
Даже не знаю как он мне подвернулся. Вероятно после одного из запросов в гугл в процессе обучениям основ tomcat'а я получил знания о существовании этой программы. Уже четвертый продукт от Apache, который мне понадобился на пути к развертыванию первого проекта на java.
Maven сочетает в себе возможности ант (билдить и копировать файлы, проводить тесты), но кроме этого он помогает решать зависимости библиотек проекта, имеет вполне формальный lifecycle, имеет множество плагинов и занимает все те же три символа в коммандной строке:
Жизненный цикл у мавена довольно ожидаемый:
При этом все шаги последовательны. И если, к примеру, выполнить
Отдельно стоит упомянуть о зависимостях. Maven конфигурируется файлом pom.xml, который может содежать блок <dependencies />. В нем описывается какие библиотеки нужны проекту для полноценного функционирования. На шаге validate мавен проверяет удовлетворены ли зависимости и если нет, то скачивает из удаленный репозиториев необходимые компоненты в репозиторий локальный. Так, если 10 проектов зависят от одной и той же библиотеки SomeSpecificOrm, то нам больше не надо подключать ее в 10 местах через
А теперь подойдем непосредственно к вопросу «чем мавен помогает в веб-разработке». Помимо компилирования, тестирования и пакетирования, мавен позволяет делать деплой проекта в tomcat посредством плагина
Конфигурация требует небольшого пояснения. Так
Так как для деплоймента через хост менеджер нужно пройти авторизацию, а указывать данные для логина в файле конфигурации не самое правильное решение, так как от сервера к серверу данные могут изменяться, поэтому используется указатель по id. Сами же данне авторизации конфигурируются в файле
Теперь чтобы проект отправить в контейнер сервлетов, достаточно выполнить:
Да. Напоследок хочу сказать, что мавен так же диктует свою иерархию директорий, но чтобы не создавать её вручную, достаточно выполнить:
А для eclipse есть специальный плагин, который упростит создание и сопровожение проекта.
P.S.Понимаю, что материал раскрыл не полностью, так что если какие-то моменты остались совсем неясными или просто не полными — пишите, а я буду статью дополнять.
P.P.S. в оригинальной статье присутствует еще небольшой опрос, к участию в котором, в большей части, приглашаются РНР разработчики, остальные же — по заинтересованости
svn:externals
, оставались только тесты, которые свободно выполнялись через $ phpunit AllTests.php
, да перенос изменений на рабочий сервер (svn export
+ небольшой самописный скрипт). Даже достаточно хорошая статья об использовании ant в eclipse не подвигла меня на использование сего инструмента, да еще и build файлы писать не хотелось…Вобщем все как всегда. Какая-то подобная штука вроде бы и не помешала бы, но все и так хорошо работало и лень было изучать псевдопомогающую технологию. Так было до тех пор, пока я не познакомился с Java…
С приходом джавы в мою жизнь, взгляд на вопрос использовать или нет автоматический билдер отпала сама собой — использовать. Ведь какой фрик будет вручную компилировать все файлы по всем директориям проекта и копировать их для деплоя в каталог контейнера сервлетов? Только очень терпеливый и не ленивый человек. Но лень двигатель прогресса и я начал читать про… maven.
Даже не знаю как он мне подвернулся. Вероятно после одного из запросов в гугл в процессе обучениям основ tomcat'а я получил знания о существовании этой программы. Уже четвертый продукт от Apache, который мне понадобился на пути к развертыванию первого проекта на java.
Maven сочетает в себе возможности ант (билдить и копировать файлы, проводить тесты), но кроме этого он помогает решать зависимости библиотек проекта, имеет вполне формальный lifecycle, имеет множество плагинов и занимает все те же три символа в коммандной строке:
mvn
vs ant
.Жизненный цикл у мавена довольно ожидаемый:
validate
— проверяет корректность метаинформации о проектеcompile
— компилирует исходникиtest
— прогоняет тесты классов из предыдущего шагаpackage
— упаковывает скомпилированые классы в удобноперемещаемый формат (jar или war, к примеру)integration-test
— отправляет упаковынные классы в среду интеграционного тестирования и прогоняет тестыverify
— проверяет корректность пакета и удовлетворение требованиям качестваinstall
— загоняет пакет в локальный репозиторий, откуда он (пекат) будет доступен для использования как зависимость в других проектахdeploy
— отправляет пакет на удаленный production сервер, откуда другие разработчики его могут получить и использовать
При этом все шаги последовательны. И если, к примеру, выполнить
$ mvn package
, то фактически будут выполнены шаги: validate, compile, test и package. Таким образом использовать мавен довольно просто. Написали код, выполнили mvn test и можно работать дальше, убедившись что код не содержит синтаксических и логических ошибок.Отдельно стоит упомянуть о зависимостях. Maven конфигурируется файлом pom.xml, который может содежать блок <dependencies />. В нем описывается какие библиотеки нужны проекту для полноценного функционирования. На шаге validate мавен проверяет удовлетворены ли зависимости и если нет, то скачивает из удаленный репозиториев необходимые компоненты в репозиторий локальный. Так, если 10 проектов зависят от одной и той же библиотеки SomeSpecificOrm, то нам больше не надо подключать ее в 10 местах через
svn:external
, особенно, если библиотека занимает достаточно места, а достаточно указать ее в файле зависимостей и она будет браться из локального репозитория мавена. При указании зависимостей можно указывать не только имя библиотеки, но и ее версию — таким образом не возникнет проблем с обратной совместимостью.А теперь подойдем непосредственно к вопросу «чем мавен помогает в веб-разработке». Помимо компилирования, тестирования и пакетирования, мавен позволяет делать деплой проекта в tomcat посредством плагина
tomcat-maven-plugin
. Конфигурируется он в pom.xml и имеет приблизительно слудеющий вид:[...] <plugins> <plugin> <groupid>org.codehaus.mojo</groupid> <artifactid>tomcat-maven-plugin</artifactid> <version>1.0-beta-1</version> <configuration> <path>/</path> <url>http://site.local:8080/manager</url> <server>site.local</server> </configuration> </plugin> </plugins> [...]
Конфигурация требует небольшого пояснения. Так
path
отвечает за путь на который будет развернут сервлет. Так как мы разворачиваем полноценное самодостаточное веб-приложение, то разворачивать будем в /. Url
указывает на путь к менеджеру хоста, через который будем проводить деплой. Сервлет менеджера создается обычно во время создания нового виртуального хоста. Server
указывает id сервера. Тут нужно еще более углубиться в объяснения…Так как для деплоймента через хост менеджер нужно пройти авторизацию, а указывать данные для логина в файле конфигурации не самое правильное решение, так как от сервера к серверу данные могут изменяться, поэтому используется указатель по id. Сами же данне авторизации конфигурируются в файле
~/.m2/settings.xml
в секции servers
. Так у меня эта секция выглядит следующим образом:[...] <servers> <server> <id>site.local</id> <username>manager</username> <password>manager</password> </server> </servers> [...]
username
и password
должны соответствовать пользователю с правами manager из файла tomcat-users.xml
(подробнее в предыдущей статье о сервлетах).Теперь чтобы проект отправить в контейнер сервлетов, достаточно выполнить:
$ mvn tomcat:deploy
и мавен сам позаботится о компилировании, тестировании, пакетировании и деплойменте проекта. Останется только обновиться страницу браузера, чтобы увидеть изменения.Да. Напоследок хочу сказать, что мавен так же диктует свою иерархию директорий, но чтобы не создавать её вручную, достаточно выполнить:
$ mvn archetype:create \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=com.mycompany.app \ -DartifactId=my-app
А для eclipse есть специальный плагин, который упростит создание и сопровожение проекта.
P.S.Понимаю, что материал раскрыл не полностью, так что если какие-то моменты остались совсем неясными или просто не полными — пишите, а я буду статью дополнять.
P.P.S. в оригинальной статье присутствует еще небольшой опрос, к участию в котором, в большей части, приглашаются РНР разработчики, остальные же — по заинтересованости