Maven и Tomcat


Ни для кого не секрет, что maven-ом можно деплоить проекты в Apache Tomcat.
Правда многие разработчики все-таки используют функции, встроенные в среду разработки (в Netbeans - из коробки, в Eclipse - ставим плагин).
Это удобно и просто, но к сожалению, мне приходится часто "перескакивать" с разных IDE и поэтому в некоторых своих проектах я предпочитаю сразу настроить tomcat:deploy.

На данный момент использую "tomcat-maven-plugin".

Запуск осуществляется командой: mvn tomcat:deploy.

Для удобство можно указать в IDE, чтобы эта команда выполнялась на действие "Run" или повесить на нее какой-нибудь HotKey.

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

В случае, если мы работаем в простых условиях, когда у нас имеется свой apache tomcat-ом установленный на локальном компьютере, то настройка довольно простая.
Нам нужно три файла.

  1. tomcat-users.xml
  2. settings.xml
  3. pom.xml

tomcat-users.xml

Файл, как правило, находится рядом с другими файлами для настройки сервера: APACHE_TOMCAT_DIR/conf/tomcat-users.xml

В нем нужно проверить, что создана роль "manager" и существует пользователь с этой ролью.
Что-то вроде этого:

<tomcat -users>
  <role rolename="manager"></role>
  <user username="user" password="123456" roles="manager"></user>
</tomcat>

Таким образом, apache tomcat будет знать, что пользователю "user" можно развертывать у него war-ики.

settings.xml

Maven-овский файл с настройками. Есть глобальный файл на систему, есть под каждого пользователя.

Я меняю как правило свой, пользовательский, он находится здесь:
${user.home}/.m2/settings.xml

Если в Windows, то это будет файл "C:\Documents and Settings\имя_пользователя\.m2\settings.xml"

В нем нужно указать Maven-у с каким логином и паролем нужно обращаться на сервер, чтобы запустить приложение.

< ?xml version="1.0" encoding="UTF-8"?>
<settings>
   <servers>
      <server>
        <!-- 
             id это просто идентификатор,  используете удобное для вас название!
            Я называю так, чтобы не запутаться, 
            т.к. у меня есть еще сервера других версий и других целей.
         -->
        <id>apache-tomcat-6.0.32</id>
        <!-- имя пользователя, которое вы указали в tomcat-users.xml -->
        <username>user</username>
        <!-- ну и естественно его пароль из tomcat-users.xml -->
        <password>123456</password>
      </server>
    </servers>
</settings>

pom.xml

Теперь в pom.xml указываем настройки для деплойщика: project/build/plugins/plugin tomcat-maven-plugin

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
         <groupid>org.codehaus.mojo</groupid>
        <artifactid>tomcat-maven-plugin</artifactid>
        <configuration>
             <!-- id-шник из settings.xml -->
             <server>apache-tomcat-6.0.32</server>
             <url>http://localhost:8080/manager</url>
            <path>/mywebapp</path>
          </configuration>
      </plugin>
  ...
    </plugins>
    ...
  </build>
  ...
</project>

Таким образом в pom.xml указывается только id сервера. Этот способ хорош тем, что вы не показываете в этом файле свой логин и пароль от личного tomcat-а. Это важно поскольку pom.xml часто бывает общественным файлом (т.к. хранят его в репозиториях вместе с исходниками).

Если резюмировать, то в целом все довольно просто. Нужно показать tomcat-у кому можно деплоить (tomcat-users.xml), показать maven-у к какому серверу и с каким логином и паролем стучаться (settings.xml) и настроить файл проекта, чтобы maven знал на какой конкретно сервер разворачивать (pom.xml).