使用Maven自动部署Java Web项目到Tomcat问题小记
导读
首先说说自己为啥要用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
- 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>
参考资料
去tomcat官网http://tomcat.apache.org/,左侧栏Apache Tomcat下的Maven Plugin,点进去选择最新版本Version 2.2
通过介绍可知,使用tomcat的maven插件有两种配置方式:
第一种:在pom.xml文件的<build></build>中加入如下配置:
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat6-maven-plugin</artifactId>
- <version>2.2</version>
- </plugin>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat7-maven-plugin</artifactId>
- <version>2.2</version>
- </plugin>
- </plugins>
- </pluginManagement>
这种配置是针对某一个项目的,只对一个项目生效。
第二种:在maven的setting.xml文件中加入如下配置:
- <pluginGroups>
- <pluginGroup>org.apache.tomcat.maven</pluginGroup>
- </pluginGroups>
这种在maven插件上的配置会对所有的项目起作用。
配置好之后,就可以启动项目看效果了。
使用Maven Build启动项目,Goals那一栏填:
tomcat6:run -Dmaven.tomcat.uriEncoding=UTF-8 -Dmaven.tomcat.path=/ -Dmaven.tomcat.port=8080
或者填:
tomcat7:run -Dmaven.tomcat.uriEncoding=UTF-8 -Dmaven.tomcat.path=/ -Dmaven.tomcat.port=8080
其中,
-Dmaven.tomcat.uriEncoding=UTF-8 这个配置最好始终加上
-Dmaven.tomcat.path=/ 这个配置可以不加,默认使用/${artifactId},此处的artifactId即建pom.xml文件时写的那个artifactId,一般为项目名。如果配置为/的话,届时访问的路径就是hostname:port/,如果配置为/test的话,则访问路径是hostname:port/test,相当于namesapce的作用。
-Dmaven.tomcat.port=8080 这个配置可以设置,默认是8080
以上两种启动方式的区别仅在于使用的tomcat的版本不一样。如果使用tomcat7的话,则如果配置方式是在pom.xml文件中配置的话,则必须配置tomcat7-maven-plugin,否则会BUILD FAILURE;如果配置方式是配置maven的setting.xml文件的话,则无所谓,<pluginGroup>org.apache.tomcat.maven</pluginGroup>这一行的作用是把所有版本的maven的tomcat插件及相关插件都下载下来了。使用tomcat6的话也同理。
使用Maven自动部署Java Web项目到Tomcat问题小记的更多相关文章
- 使用Maven自动部署Java Web应用到Tomcat服务器
		学习如何使用Maven,我推荐一本工具书,<maven the definitive guide>.在这本工具书手中,详细介绍了maven的使用思想,并且提供了从基本到复杂的具体项目应用. ... 
- Eclipse部署Java Web项目到Tomcat出错
		1.今天,我打开Eclipse,准备将一个Java Web项目部署到Tomcat中, 结果弹出提示错误窗口,具体如下: (1)出错详情 Could not publish server configu ... 
- IntelliJ IDEA14 和 Maven 系列:使用IntelliJ IDEA 14和Maven 7 创建java web项目(一)
		Intellij IDEA作为最好的Java IDE,创建Maven项目还是比较简单的,但是创建一个Maven Web项目还是要修改一些配置的,下面进行总结整理. 1前言 在创建项目中,IDEA提供了 ... 
- 阿里云服务器部署Java Web项目全过程
		最近需要将一个Java Web项目部署到服务器上,方便多人共享访问.这也是我第一次接触服务器之类的东西,也花了一点时间,最终总算部署成功,写下一篇文章记录以便日后回顾. 购买服务器 第一步当然是需要购 ... 
- Linux CentOS下部署Java Web项目
		本文讲解如何在Linux CentOS下部署Java Web项目的步骤. 一.环境准备: (1)Linux CentOS (2)apache-tomcat-9.0.10 (3)XShell 二.启动t ... 
- 阿里云部署Java web项目初体验(转)
		林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在 ... 
- 阿里云部署Java web项目初体验(转)/linux 上配置jdk和安装tomcat
		摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在阿里云上部署Java web项目. 一.准备工作 购买了阿里云的云解析,和云服务器ecs. 2.下载put ... 
- 在linux下用tomcat部署java web项目的过程与注意事项
		在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ... 
- 部署Java Web项目报错(一)
		今天,我在部署Java Web项目时,出现错误,并且在eclipse新建一个servers,却出现多个项目. 具体错误截图如下: 然后,我又将项目部署到JBoss服务器中,却还是运行不成功 22:12 ... 
随机推荐
- NBUT1457
			不知道哪里的oj..做了交不上去.. 也是莫队的模板题 #include<iostream> #include<cstring> #include<cstdio> ... 
- 步步为营-69-Razor基础
			作用:进一步将HTML代码和C#代码进行解耦 1.1 引用程序集(RazorEngine.dll,System.Web.Razor.dll) 1.1.1 可以从http://razorengine.c ... 
- POJ 2752 Seek the Name, Seek the Fame(next数组运用)
			Seek the Name, Seek the Fame Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24000 ... 
- 《JavaScript 高级程序设计》第二章:在HTML中使用JavaScript
			script 标记是 netspace 公司最早为在 html中引入 javascript代码而创造的HTML元素,并最终被 HTML规范采纳. script 标记有四个比较重要的属性: src ty ... 
- HBuilder支持jquery、zepto、angular、ext、dojo 等js框架的提示吗
			HBuilder有通行的js扫描分析提示,大部分js库都可以方便的提示.但js是一门超级灵活的语言,通行分析有时分析的不够完美,如果对框架做单独优化配置,可以有更好的提示.DCloud官方对jquer ... 
- [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库
			时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ... 
- css盒子模型和定位
			content padding border margin 可以理解为在商场上看到的电视机. 电视机------content 装电视机的箱子边框有粗细------border 电视机与箱子之间的泡沫 ... 
- Kubernetes学习系列
			这段时间项目组内想要引入Kubernetes,作为第二代容器调度引擎,故最近在系统的学习Kubernetes.整理了一些学习笔记,心得,放到博客中,一来记录自己的学习经过,二来看能否帮到有需要的同学. ... 
- 网络流24题 第五题 - PowerOJ1740  CodeVS1905 圆桌问题  二分图多重匹配  网络最大流
			欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - PowerOJ1740 - 有SPJ - 推荐 题目传送门 - CodeVS1905 - 无SPJ - 0% ... 
- PHP通过PDFParser解析PDF文件
			之前一直找到的资料都是教你怎么生成pdf文档,比如:TCPDF.FPDF.wkhtmltopdf.而我碰到的项目里需要验证从远程获取的pdf文件是否受损.文件内容是否一致这些问题,这些都不能直接提供给 ... 
