注意,我是本地测试的,贫困的我没钱买服务器远程测试。
开发工具:Idea 管理工具:apache-maven-3.5.2 服务器:apache-tomcat-7.0.55
1、添加Tomcat账户:
<role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="admin" password="password" roles="manager-gui,manager-script" />
2、配置maven和tomcat关联关系,账号密码同上配置,在settings.xml中配置,我是配置在%MAVEN_HOME%\conf\settings.xml下的,自定义的settings.xml路径下配置是否有效可以自己尝试
<server> <id>TomcatServer</id><!--配置你的服务器名--> <username>admin</username> <password>password</password> </server>
3、Maven引入热部署需要的包,pom.xml如下,其中<server>TomcatServer</server>与上面配置的服务器名相同:
<plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://127.0.0.1:8080/manager/text</url> <server>TomcatServer</server> <update>true</update> <!--<path>/MavenBuilder##version</path>--> <path>/MavenBuilder</path> </configuration> </plugin> </plugins>
4.修改tomcat配置(走投无路了试试,说不定有效),路径%JAVA_HOME%\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>
以上主要配置完成后,很多人会发现报各种奇怪错误:
注意点1:不要太相信自己,仔细检查tomcat登录账号,密码,还有服务id是否是匹配的。
注意点2:<url>http://127.0.0.1:8080/manager/text</url> 不同的tomcat版本配置路径可能不同,可能是<url>http://127.0.0.1:8080/manager/html</url>
注意点3:<update>true</update>这个配置如果没有,你第二次部署会扑街,因为已经部署过一次,同名项目部署第二次导致。
注意点4:包冲突或者版本不对,pom.xml配置如下:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
注意点5:搞清原理,热部署主要的作用是在不关闭服务器的时候添加或修改项目,tomcat必须要开着,并且保证能访问manager手动管理里面的项目。
注意点6:maven指令是tomcat7:deploy 别点错了。
注意点7:pom.xml中的<packaging>war</packaging>不要漏掉了。
注意点8:热部署导致内存溢出的问题配置如下:
pom.xml:
<dependency> <groupId>se.jiderhamn.classloader-leak-prevention</groupId> <artifactId>classloader-leak-prevention-servlet</artifactId> <version>2.1.0</version> </dependency>
web.xml(放在web.xml的最上方):
<!--处理热部署导致的内存溢出--> <listener> <listener-class>se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventorListener</listener-class> </listener>
谢谢之前被我参考过的各位博主。。。参考太多记不住了,抱歉
贴一张成功的图,表达一下偶不是骗纸。
Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) on project XXXXXX: Cannot invoke Tomcat manager: Connection reset by peer:
上面的报错信息用来提高搜索到的概率,请无视。