maven改java文件自动部署_使用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插件一般像下面这样配置:

org.codehaus.mojo

tomcat-maven-plugin

1.1

/test

http://localhost:8080/manager/

tomcat

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

tomcat

admin

123456

这里的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地址,将

改为

2)tomcat用户权限分配问题,需要同时具备manager-gui和manager-script权限,比如忘了分配manager-script权限。

正确的conf/tomcat-users.xml配置应为:

不过我的问题都不是上面两个,我的问题是自动部署命令写错了,应该是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

org.apache.tomcat.maven

tomcat7-maven-plugin

2.0-SNAPSHOT

http://XXX:8080/manager/html

tomcat

admin

12345

/${finalName}

true

“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即可:

org.apache.maven.plugins

maven-war-plugin

2.1.1

WEB-INF/web.xml

参考资料

去tomcat官网http://tomcat.apache.org/,左侧栏Apache Tomcat下的Maven Plugin,点进去选择最新版本Version 2.2

通过介绍可知,使用tomcat的maven插件有两种配置方式:

第一种:在pom.xml文件的中加入如下配置:

org.apache.tomcat.maven

tomcat6-maven-plugin

2.2

org.apache.tomcat.maven

tomcat7-maven-plugin

2.2

这种配置是针对某一个项目的,只对一个项目生效。

第二种:在maven的setting.xml文件中加入如下配置:

org.apache.tomcat.maven

这种在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文件的话,则无所谓,org.apache.tomcat.maven这一行的作用是把所有版本的maven的tomcat插件及相关插件都下载下来了。使用tomcat6的话也同理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值