在学习Maven时学习到配合Tomcat进行热部署的问题。所谓的热部署,即是在Tomcat服务器启动的时候,将项目动态部署上去。
我使用的是Tomcat7.0.52和Maven3.6.3和eclipse+jdk1.8
在进行热部署时,首先要开启Tomcat热部署:
a)修改tomcat -> conf-> tomcat-users.xml 配置文件;
b)在tomcat-users标签中加入以下代码:username与password是自定义的,而在Tomcat7中要配置gui和script权限
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="joey" password="123123" roles="manager-gui, manager-script"/>
热部署完成后,接下来要启动Tomcat,在Maven项目中的pom.xml中修改Tomcat7插件配置,添加如下代码:
<configuration>
<url>http://localhost:8080/manager/text</url>
<username>joey</username>
<password>123123</password>
</configuration>
最后通过run as -> maven build… 在goals中使用tomcat7:deploy或tomcat7:redeploy来进行热部署。以上是正确的步骤
接下来是我遇到的错误:deploy后编译器报错,并未成功部署
无法转换URL路径,看回我项目中的插件配置
url中少了http:// (协议头),所有导致url无法正常解析,经测试,若少了后面的/text,同样无法正确部署。因此在使用tomcat7进行热部署操作时,一定要注意插件配置的正确性!!
接下来整合一下Maven与Tomcat热部署中常见的错误
a)Connection refused 错误
[ERROR]Failed to execute goal org.apache.tomcat.maven: tomcat7-maven-plugin: 2.0- SNAPSHOT: deploy
(default-cli) on project helloworld: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1]
导致此错误原因是未启动Tomcat
解决办法是先启动Tomcat,注意热部署就是在服务器运行中部署上项目。
b) 401错误
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin: 2.0-SNAPSHOT:deploy (default-cli) on
project helloworld: Cannot invoke Tomcat manager: Server returned HTTP response code: 401 for URL:
http://localhost:8080/manager/text/deploy?path=%2Fhelloworld -> [Help 1]
导致此错误的主要原因是因为权限不足的问题。
解决的办法是在文章前面提到的要先修改Tomcat 中的tomcat-users.xml的权限信息同时还要修改项目中的pom.xml中的插件信息
c) 403错误
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin: 2.0-SNAPSHOT:deploy (default-cli)
on project helloworld:Cannot invoke Tomcat manager: Server returned HTTP response code:
403 for URL: http://localhost:8080/manager/html/deploy?path=%2Fhelloworld -> [Help 1]
产生该问题的主要原因有两个,一是因为pom.xml文件中url部署未写对(上文中我所犯的错误),二是因为用户缺少权限
解决办法
i)检查pom.xml中tomcat插件配置中的url地址是否正确
<url>http://localhost:8080/manager/text</url>
ii)检查tomcat用户权限配置文件中是否具备了manager-gui和manager-script权限
<user username="joey" password="123123" roles="manager-gui, manager-script"/>