Maven自动部署Web项目到Tomcat服务器

Posted 我挥一挥手指

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven自动部署Web项目到Tomcat服务器相关的知识,希望对你有一定的参考价值。

  • 一、问题来源

  • 二、问题解决过程

    • 1. 原理

    • 2. 配置项

      • 2.1.远程Tomcat服务器

      • 2.2.本地

    • 3. 部署命令

    • 4. 成功提示

    • 5. 遇到的主要问题

    • 6. 参考


一、问题来源

最近刚开始用Maven作为项目管理工具,花了一个晚上看了一个系列的Maven自动化管理的视频-《Maven在Java项目中的应用》,感受到了其在项目导入、编译、测试、部署等环节的强大之处。

回到工作中,每次部署都是先打开远程服务器,首先关闭Tomcat服务,将项目编译过的文件夹拷贝到服务器覆盖之,重启Tomcat服务。大概每次都是这个流程,一两次还好,多了就不厌其烦了。

想到一句话:

程序员应该用代码简化工作流程,解决生活工作中的痛点,优雅的工作,提高生活质量。

联想之前的视频学习,可以用命令来让计算机简化繁琐的点点点过程啊。

二、问题解决过程

1. 原理

Maven自动部署调用的是Tomcat安装目录下的manager功能。

2. 配置项

2.1.远程Tomcat服务器

为了能正常访问http://serverIpAddress:8080/manager页面,我们需要修改$TOMCAT_HOME/conf目录下的tomcat-users.xml

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

注:一般的tomcat-users.xml中都包含了manager-gui、manager-script这两个角色,不用额外添加了。

2.2.本地

2.2.1 pom.xml增加Tomcat Maven插件

我使用的Tomcat7,pom.xml中增加如下配置:

<build>    <finalName>${project.artifactId}</finalName>    <plugins>        ...        ...        <!-- 配置的maven部署服务器 -->          <plugin>            <groupId>org.apache.tomcat.maven</groupId>            <artifactId>tomcat7-maven-plugin</artifactId>            <version>2.2</version>            <configuration>                <url>http://serverIpAddress:8080/manager/text</url>  <!-- tomcat服务manager管理页地址 -->                <server>tomcat</server>         <!-- tomcat服务器名 -->                <username>tomcat</username>     <!-- tomcat-users.xml中用户名 -->                <password>secret</password>     <!-- tomcat-users.xml中服务器密码 -->                <uriEncoding>${project.build.sourceEncoding}</uriEncoding>                <path>/${project.build.finalName}</path>  <!-- 访问应用的路径 -->                <update>true</update>  <!-- 自动更新到tomcat服务器上 -->            </configuration>        </plugin>    </plugins></build>

重新运行Maven install命令(或已自动import)。

2.2.2 修改Maven的settings.xml

在$USER_HOME/.m2目录下找到settings.xml(也可以自己配置路径),添加server节点

<servers>
    <server>
       <id>tomcat</id>
       <username>tomcat</username>
       <password>tomcat</password>
    </server></servers>

注:上面的username、password依然与tomcat-users.xml中相同,id与pom.xml中的server相同

3. 部署命令

先确保Tomcat服务器已经启动,然后cd到项目根目录,运行命令

mvn clean tomcat7:redeploy

4. 成功提示

➜  projectname  mvn clean tomcat7:redeploy
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building projectname 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ projectname ---
[INFO] Deleting /Users/CJS/Documents/VersionRepository/Git/projectname/target
[INFO]
[INFO] >>> tomcat7-maven-plugin:2.2:redeploy (default-cli) > package @ projectname >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ projectname ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ projectname ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to /Users/CJS/Documents/VersionRepository/Git/projectname/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ projectname ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ projectname ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ projectname ---
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ projectname ---
[INFO] Packaging webapp
[INFO] Assembling webapp [projectname] in [/Users/CJS/Documents/VersionRepository/Git/projectname/target/projectname]
[INFO] Processing war project
[INFO] Copying webapp resources [/Users/CJS/Documents/VersionRepository/Git/projectname/src/main/webapp]
[INFO] Webapp assembled in [56 msecs]
[INFO] Building war: /Users/CJS/Documents/VersionRepository/Git/projectname/target/projectname.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO]
[INFO] <<< tomcat7-maven-plugin:2.2:redeploy (default-cli) < package @ projectname <<<
[INFO]
[INFO] --- tomcat7-maven-plugin:2.2:redeploy (default-cli) @ projectname ---
[INFO] Deploying war to http://blog.vzhibo.tv:8080/projectname  Uploading: http://xxxx:8080/manager/text/deploy?path=%2Fprojectname&update=trueUploaded: http://xxxx:8080/manager/text/deploy?path=%2Fprojectname&update=true (1774 KB at 1193.7 KB/sec)[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Undeployed application at context path /projectname
[INFO] OK - Deployed application at context path /projectname
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.042 s
[INFO] Finished at: 2017-09-19T16:48:07+08:00[INFO] Final Memory: 15M/81M
[INFO] ------------------------------------------------------------------------
➜  projectname

然后就能在Tomcat服务器目录的webapps下找到新部署的WAR包。

初次部署用的是tomcat7:deploy命令,重新部署可以用tomcat7:redeploy命令.

Tomcat Maven插件支持的命令包括:run、shutdown、run-war-only、exec-war、standalone-war-only、deploy、standalone-war、undeploy、run-war、redeploy等。

5. 遇到的主要问题

  1. plugin放在pom.xml中的位置

搜索的资料中没有指明放在pox.xml哪个位置,因为其中有多个位置可以放 <plugins></plugins> 标签。

多次尝试后发现在build标签中。

  1. 配置中的Maven的setting文件是哪一个

修改测试了几个Maven版本,有3.1.1,3.3.9等,可在IDEA-File-settings-Build,Execution,Deplpoyment-Build Tools-Maven中的Maven home directoryUser settings fileLocal repository三个位置设置。

6. 参考

  • The Search Engine for The Center Repositpory

  • Maven部署Web项目到Tomcat的配置

  • Maven自动部署Tomcat错误排除


以上是关于Maven自动部署Web项目到Tomcat服务器的主要内容,如果未能解决你的问题,请参考以下文章

Maven学习教程------将web项目自动部署到tomcat下

将web项目发布到tomcat之后自动给改名了

使用eclipse maven和tomcat自动部署web项目

将maven项目部署到tomcat服务器(可能遇到的bug: 启动tomcat后,Maven项目做的ava Web时无WEB-INF/classes)

开发过程使用Tomcat Maven插件持续快捷部署Web项目

Maven项目配置tomcat插件实现项目自动部署到远程服务器