您的位置:首页 > 运维架构 > Tomcat

使用Maven自动部署Java Web项目到Tomcat问题小记

2017-07-05 18:53 656 查看

导读

首先说说自己为啥要用maven管理项目,一个直接的原因是:我在自己电脑上开发web项目,每次部署到服务器上时都要经历如下步骤:

首先在Eclipse里将项目打包成war包

将服务器上原来的项目文件夹删掉
cd /var/lib/tomcat7/webapps
sudo rm XXX.war
sudo rm -rf XXX


将war包传到服务器上,比如用pscp命令上传
pscp -pw "xxx" XXX.war username@ip:/var/lib/tomcat7/webapps


重启tomcat
sudo service tomcat7 restart


每次都这些步骤,非常烦人,而用maven来管理就不需要这些步骤啦,直接在Eclipse里配置maven插件,然后使用maven来自动部署项目,关于怎么自动部署可网上很多教程,具体可参看后面的参考资料,部署成功后只需要用一个命令即可自动将我的web项目部署到tomcat服务器上,我一般用下面这样的命令:

mvn tomcat7:deploy -Dmaven.test.skip=true

其中-Dmaven.test.skip=true表示临时性跳过测试代码的编译(也可用-DskipTests表示跳过测试阶段),maven.test.skip同时控制maven-compiler-plugin和maven-surefire-plugin两个插件的行为,即跳过编译,又跳过测试。

但初次按着教程来总是遇到各种问题,下面记录我在部署过程中遇到的各种问题及注意事项,以提供参考意义。

maven使用问题小记

maven配置文件pom.xml里的tomcat插件一般像下面这样配置:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<path>/test</path>
<url>http://localhost:8080/manager/</url>
<server>tomcat</server>
</configuration>
</plugin>

里面的server需要在maven的配置文件settings.xml里配置如下:

<server>
<id>tomcat</id>
<username>admin</username>
<password>123456</password>
</server>

这里的username和password一般为tomcat server的用户名和密码。

开始运行自动部署命令时,一定要先启动tomcat。否则会报下列错误:

[INFO]
[INFO] --- tomcat-maven-plugin:1.0:redeploy (default-cli) @ SSHMJ-FRANK ---
[INFO] Deploying war to http://localhost:8080/SSHMJ-FRANK [INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.630s
[INFO] Finished at: Tue Aug 31 16:35:52 CST 2010
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.0:redeploy (default-cli) on project SSHMJ-FRANK: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException[/code] 
HTTP 403错误

[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat-maven-plugin: 1.1:
deploy (default-cli) on project XXX: Cannot invoke Tomcat manager:
Server returned HTTP response code: 403 for URL: http://localhost:8080/manager/html/deploy?path=XXX -> [Help 1]

网上有人说产生该问题有可能因为两个原因:
1)如果使用的是Tomcat 7,需要修改pom.xml中部署的url地址,将
<url>http://localhost:8080/manager</url>
改为
<url>http://localhost:8080/manager/text</url>
2)tomcat用户权限分配问题,需要同时具备manager-gui和manager-script权限,比如忘了分配manager-script权限。
正确的conf/tomcat-users.xml配置应为:

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

不过我的问题都不是上面两个,我的问题是自动部署命令写错了,应该是mvn tomcat7:deploy命令,而我之前用的是mvn tomcat:deploy命令

“Application already exists at path”问题
使用tomcat7-maven-plugin插件部署到tomcat服务器时,当服务器上已经有相同名字的项目就会导致

FAIL - Application already exists at path ...

解决方法是在pom.xml文件中配置tomcat7-maven-plugin插件时加入参数update

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<configuration>
<url>http://XXX:8080/manager/html</url>
<server>tomcat</server>
<username>admin</username>
<password>12345</password>
<path>/${finalName}</path>
<update>true</update>
</configuration>
</plugin>


“web.xml which will be ignored ”问题
在使用Maven 编译项目的时候会出现:

[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored
(webxml attribute is missing from war task, or ignoreWebxml attribute is specified as 'true')

解决方法是添加下面这样一个plugin即可:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
</configuration>
</plugin>


参考资料

使用Maven自动部署Java Web应用到Tomcat服务器

Maven入门示例(3):自动部署至外部Tomcat

Maven入门示例(4):自动部署Tomcat错误排除

Maven使用中的常见问题整理

摘自:http://blog.csdn.net/lanxuezaipiao/article/details/40356991
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: