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. 遇到的主要问题
plugin放在pom.xml中的位置
搜索的资料中没有指明放在pox.xml哪个位置,因为其中有多个位置可以放 <plugins></plugins>
标签。
多次尝试后发现在build
标签中。
配置中的Maven的setting文件是哪一个
修改测试了几个Maven版本,有3.1.1,3.3.9等,可在IDEA-File-settings-Build,Execution,Deplpoyment-Build Tools-Maven中的Maven home directory
、User settings file
和Local repository
三个位置设置。
6. 参考
The Search Engine for The Center Repositpory
Maven部署Web项目到Tomcat的配置
Maven自动部署Tomcat错误排除
以上是关于Maven自动部署Web项目到Tomcat服务器的主要内容,如果未能解决你的问题,请参考以下文章
Maven学习教程------将web项目自动部署到tomcat下
使用eclipse maven和tomcat自动部署web项目
将maven项目部署到tomcat服务器(可能遇到的bug: 启动tomcat后,Maven项目做的ava Web时无WEB-INF/classes)