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


    导读

    首先说说自己为啥要用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>

    参考资料

    摘自:http://blog.csdn.net/lanxuezaipiao/article/details/40356991

  • 相关阅读:
    771. Jewels and Stones
    706. Design HashMap
    811. Subdomain Visit Count
    733. Flood Fill
    117. Populating Next Right Pointers in Each Node II
    250. Count Univalue Subtrees
    94. Binary Tree Inorder Traversal
    116. Populating Next Right Pointers in Each Node
    285. Inorder Successor in BST
    292. Nim Game Java Solutin
  • 原文地址:https://www.cnblogs.com/antyi/p/7122984.html
Copyright © 2020-2023  润新知