Da IDE direto para o servidor: Deploy automático no Tomcat através do Maven

Hélio Márcio Filho
Dev.log
Published in
3 min readApr 22, 2018

Durante o ciclo de desenvolvimento de uma aplicação Java Web é bastante comum que após trabalhar no código-fonte seja necessário atualizar imediatamente o servidor que hospeda a aplicação. O workflow mais comum geralmente é:

Fluxo comum de deploy

Este processo além de chato e burocrático pode consumir um tempo valioso se precisar ser repetido várias vezes ao longo de um dia de trabalho. Nada bom. Mas, e se pudesse ser assim:

Deploy direto pela IDE através do Maven

É possível e fácil. Vamos ver.

Configurando credenciais do Tomcat

Primeiramente é necessário configurar a instalação do Maven informando as credenciais de acesso do Tomcat para que o deploy seja possível. Isso é feito no arquivo settings.xml dentro da pasta do Maven oculta .m2. A localização varia dependendo do sistema operacional:

No Windows: C:\Users\usuario\.m2

No Linux: /home/usuario/.m2

Dentro desta pasta, se não existir, crie o arquivo settings.xml conforme abaixo:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">

<servers>
<server>
<id>servidor_producao</id>
<username>tomcat</username>
<password>t0mc4t</password>
</server>
</servers>
</settings>

O atributo <id> define um nome qualquer que será utilizado para referenciar a configuração posteriormente, enquanto os valores de <username> e <password> devem ser substituídos, respectivamente, pelo usuário e senha da instalação do Tomcat.

Importante: o usuário deve estar configurado com a role manager-script no arquivo tomcat-users.xml:

<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,manager-script"/>

Configurando o pom.xml

O próximo passo é ativar e configurar o plugin do Tomcat para Maven no pom.xml do projeto:

<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>servidor_producao</server>
<path>/minha-aplicacao</path>

</configuration>
</plugin>
</plugins>
</build>
  • O atributo <server> recebe o valor de <id> correspondente a configuração em settings.xml que se deseja utilizar;
  • O atributo <path> será o contexto sob o qual a aplicação será disponibilizada.

E se o Tomcat estiver em uma máquina externa na rede?

Nesse caso, será necessário alterar o arquivo webapps/manager/META-INF/context.xml. Este arquivo contém uma expressão regular que determina quais endereços IP têm permissão para realizar o deploy remoto e, por padrão, somente localhost é permitido. Observe o atributo allow:

<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

Para corrigir, acrescente o IP da máquina de desenvolvimento na expressão regular do Tomcat remoto:

<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.1.16" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

Testando

Finalmente, invoque o plugin através da IDE com o comando: clean tomcat7:redeploy

Intellij IDEA:

Configurando a execução do comando de deploy
Log de sucesso do deploy
Servidor já em execução no Tomcat

--

--