Развертывание приложения на Tomcat с Apache Maven

С помощью Apache Maven можно в автоматизированном режиме разворачивать WAR-приложения на Apache Tomcat.

1. Авторизация в Apache Tomcat

Открываем файл conf/tomcat-users.xml в директории, куда распакован Apache Tomcat и добавляем роли manager-gui и manager-script:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>

  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="admin" password="admin" roles="manager-gui,manager-script" />

</tomcat-users>

2. Разрешаем доступ Maven к Tomcat

Для этого открываем файл $MAVEN_HOME/conf/settings.xml и добавляем сервер:

<?xml version="1.0" encoding="UTF-8"?>
<settings ...>
  <servers>
     
    <server>
      <id>TomcatServer</id>
      <username>admin</username>
      <password>admin</password>
    </server>

  </servers>
</settings>

3. Добавляем плагин для автодеплоя

Открываем pom.xml в проекте и добавляем в него плагин:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.test</groupId>
    <artifactId>testProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <build>
        <plugins>
            ... другие плагины
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <url>http://localhost:8080/manager/text</url>
                    <server>TomcatServer</server>
                    <path>/educationProject</path>
                </configuration>
            </plugin>
            ... другие модули
        </plugins>
    </build>
</project>

В разделе configuration указываем:

url – адрес, где запущен Tomcat и путь к manager/text

server – id сервера из файла settings.xml

path – адрес, по которому будет доступно развертываемое приложение

4. Развертывание приложения

Для развертывания приложения выполняем команду mvn tomcat7:deploy. Пример вывода:

> $ mvn tomcat7:deploy                                                                                           
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for ru.datatech:testProject:war:1.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-war-plugin is missing. @ line 14, column 21
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building testProject 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> tomcat7-maven-plugin:2.2:deploy (default-cli) > package @ testProject >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testProject ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testProject ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ testProject ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/abarmin/IdeaProjects/educationProject/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ testProject ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ testProject ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-war-plugin:2.2:war (default-war) @ testProject ---
[INFO] Packaging webapp
[INFO] Assembling webapp [testProject] in [/Users/abarmin/IdeaProjects/educationProject/target/testProject-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [/Users/abarmin/IdeaProjects/educationProject/src/main/webapp]
[INFO] Webapp assembled in [29 msecs]
[INFO] Building war: /Users/abarmin/IdeaProjects/educationProject/target/testProject-1.0-SNAPSHOT.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] 
[INFO] <<< tomcat7-maven-plugin:2.2:deploy (default-cli) < package @ testProject <<<
[INFO] 
[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ testProject ---
[INFO] Deploying war to http://localhost:8080/educationProject  
Uploading: http://localhost:8080/manager/text/deploy?path=%2FeducationProject
Uploaded: http://localhost:8080/manager/text/deploy?path=%2FeducationProject (3 KB at 2329.1 KB/sec)

[INFO] tomcatManager status code:200, ReasonPhrase:
[INFO] OK - Deployed application at context path /educationProject
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.713 s
[INFO] Finished at: 2016-01-30T20:57:08+05:00
[INFO] Final Memory: 15M/206M
[INFO] ------------------------------------------------------------------------

Для повторного разворачивания следует использовать mvn tomcat7:redeploy, а для удаления приложения mvn tomcat7:undeploy