Maven自动部署项目到远程Tomcat服务器

配置 tomcat 的 manager

1、修改 tomcat服务器下的 /conf/tomcat-users.xml 文件,在尾部添加如下内容;

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

将上述 password 改成自己需要的密码,保存退出;

2、在 tomcat服务器下的 /conf/Catalina/localhost/ 目录下创建一个 manager.xml 文件,添加如下内容;

<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
             <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

保存退出,并重启 tomcat;

3、浏览器输入:http://serverip:port/manager/html,输入用户名和密码,此处的密码为 manager-gui 对应的用户名和密码;

输入密码后,即可进入管理控制台;

配置 maven 项目

1、修改 maven 项目的 pom.xml 文件,在 plugins 节点下,添加如下 plugin 节点;

<plugin>
    
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://serverip:port/manager/text</url>
        <!-- manager-script 对应的用户和密码 -->
        <username>admin</username>
        <password>password</password>
        <update>true</update>
        <path>/webapp</path>
    </configuration>

</plugin>

2、执行 maven 命令,进行自动化部署;

第一次部署:mvn tomcat7:deploy(对于 tomcat 8,9 均使用此命令)

更新部署:mvn tomcat7:redeploy

防止内存泄漏

部署时产生内存泄漏的原因是每次(重新)部署时,Tomcat会为项目新建一个类加载器,而旧的类加载器没有被GC回收;

maven 提供了一个库 classloader-leak-prevention-servlet 可以用来解决这个问题;

1、maven 的 pom.xml 中添加依赖;

<dependency>
    <groupId>se.jiderhamn.classloader-leak-prevention</groupId>
    <artifactId>classloader-leak-prevention-servlet</artifactId>
    <version>2.1.0</version>
</dependency>

2、项目的 web.xml 中,添加一个 Listener(此监听器必需为 web.xml 中的第一个 Listener,否则无效)

<listener>
    <listener-class>se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventorListener</listener-class>
</listener>

至此,内存泄漏问题解决,maven 项目可正常远程部署;