导读

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

  1. 首先在Eclipse里将项目打包成war包
  2. 将服务器上原来的项目文件夹删掉
    cd /var/lib/tomcat7/webapps
    sudo rm XXX.war
    sudo rm -rf XXX
  3. 将war包传到服务器上,比如用pscp命令上传
    pscp -pw "xxx" XXX.war username@ip:/var/lib/tomcat7/webapps
  4. 重启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使用问题小记

  1. 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的用户名和密码。

  2. 开始运行自动部署命令时,一定要先启动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
  3. 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命令

  4. “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>
  5. “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>中加入如下配置:

  1. <pluginManagement>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.tomcat.maven</groupId>
  5. <artifactId>tomcat6-maven-plugin</artifactId>
  6. <version>2.2</version>
  7. </plugin>
  8. <plugin>
  9. <groupId>org.apache.tomcat.maven</groupId>
  10. <artifactId>tomcat7-maven-plugin</artifactId>
  11. <version>2.2</version>
  12. </plugin>
  13. </plugins>
  14. </pluginManagement>

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

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

  1. <pluginGroups>
  2. <pluginGroup>org.apache.tomcat.maven</pluginGroup>
  3. </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问题小记的更多相关文章

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

    学习如何使用Maven,我推荐一本工具书,<maven the definitive guide>.在这本工具书手中,详细介绍了maven的使用思想,并且提供了从基本到复杂的具体项目应用. ...

  2. Eclipse部署Java Web项目到Tomcat出错

    1.今天,我打开Eclipse,准备将一个Java Web项目部署到Tomcat中, 结果弹出提示错误窗口,具体如下: (1)出错详情 Could not publish server configu ...

  3. IntelliJ IDEA14 和 Maven 系列:使用IntelliJ IDEA 14和Maven 7 创建java web项目(一)

    Intellij IDEA作为最好的Java IDE,创建Maven项目还是比较简单的,但是创建一个Maven Web项目还是要修改一些配置的,下面进行总结整理. 1前言 在创建项目中,IDEA提供了 ...

  4. 阿里云服务器部署Java Web项目全过程

    最近需要将一个Java Web项目部署到服务器上,方便多人共享访问.这也是我第一次接触服务器之类的东西,也花了一点时间,最终总算部署成功,写下一篇文章记录以便日后回顾. 购买服务器 第一步当然是需要购 ...

  5. Linux CentOS下部署Java Web项目

    本文讲解如何在Linux CentOS下部署Java Web项目的步骤. 一.环境准备: (1)Linux CentOS (2)apache-tomcat-9.0.10 (3)XShell 二.启动t ...

  6. 阿里云部署Java web项目初体验(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在 ...

  7. 阿里云部署Java web项目初体验(转)/linux 上配置jdk和安装tomcat

    摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在阿里云上部署Java web项目. 一.准备工作 购买了阿里云的云解析,和云服务器ecs. 2.下载put ...

  8. 在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  9. 部署Java Web项目报错(一)

    今天,我在部署Java Web项目时,出现错误,并且在eclipse新建一个servers,却出现多个项目. 具体错误截图如下: 然后,我又将项目部署到JBoss服务器中,却还是运行不成功 22:12 ...

随机推荐

  1. sipML5聊天功能实现

    一.环境说明:在阅读sipML5的API文档时,发现它具有聊天的功能,于是在sipML5的源码中进行设定,实现了注册之后可以英文聊天(中文聊天需要在FreeSWITCh中进行设定). 二.具体配置: ...

  2. HashMap Hashtable LinkedHashMap 和TreeMap

    Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的 ...

  3. 【 总结 】Tcp Keepalive 和 HTTP Keepalive 详解

    TCP Keepalive Tcp keepalive的起源          双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动释放连接,而有些不会,那么在长时间无数据 ...

  4. Java枚举的小知识点

    enum 是jdk1.5引入的,使用它可以创建枚举类型,就像使用class创建类一样. enum关键字创建的枚举类型默认是java.lang.Enum(一个抽象类)的子类 用法1 常量 一般定义常量都 ...

  5. vue渲染时对象里面的对象的属性提示undefined,但渲染成功

    场景: 从后台请求的数据结构如下: 我的list是对象,而comment又是list里的对象,渲染成功了,却报如下错: 解决办法: 添加一个:v-if

  6. LeetCode(39):组合总和

    Medium! 题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates ...

  7. listbox或datagrid内容双击事件绑定

    ====listbox=== <DataTemplate> <Border Width="350" Height="230" Margin=& ...

  8. android 换行符(\n) 在TextView中显示不正常的问题

    问题描述 在Android开发,使用TextView设置换行的时候,会有这种情况: 1.如果直接在XML文件中写入"aaaaa\nbbbb"可以换行,显示为: aaaaabbbbb ...

  9. 【BZOJ1135】[POI2009]Lyz

    题解: hall定理..第一次听说 思考了半小时无果 二分图匹配时间显然太大 但是有这个hall定理 二分图有完美匹配的充要条件是 对于左边任意一个集合(大小为|s|),其连边点构成的集合(大小为|s ...

  10. openstack基础环境准备(一)

    一.环境介绍 操作系统 ip地址 主机名 服务 centos7.5 192.168.56.11 linux-node1 控制节点 centos7.5 192.168.56.12 linux-node2 ...