共计 7587 个字符,预计需要花费 19 分钟才能阅读完成。
我在平时工作中部署 Web 项目到测试服务器上的 Tomcat 时用的是 Hudson。Hudson 本身已经跟 SVN、Git、Maven 集成并且支持添加各种插件。但如果使用 Hudson,我需要配置两个任务:一个任务负责打包项目成 WAR,另外一个任务负责部署打包好的 WAR 包到目标服务器的 Tomcat 上。虽然任务只需要配置一次,但每次修改代码提交后,都得切换到浏览器点 Hudson 构建任务页面上的 Build Now 按钮,然后还得跳转到另一个页面观察是否有报错。烦不胜烦,偶然发现 Tomcat Maven 插件支持直接部署项目到 Tomcat 中,尝试一番后终于搞定,总结于此。
网上关于这个主题的文章也不少,过程也大同小异,但本文最主要的是想记录下我在此过程中踩过的坑和关于这种部署方案的建议。
Maven 权威指南_中文完整版清晰 PDF http://www.linuxidc.com/Linux/2014-06/103690.htm
Maven 3.1.0 发布,项目构建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm
Linux 安装 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm
Maven3.0 配置和简单使用 http://www.linuxidc.com/Linux/2013-04/82939.htm
Ubuntu 下搭建 sun-jdk 和 Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm
Maven 使用入门 http://www.linuxidc.com/Linux/2012-11/74354.htm
在 Ubuntu 12.04 LTS 上通过 Tomcat 部署 Solr 4 http://www.linuxidc.com/Linux/2012-09/71158.htm
Ubuntu 下部署 Solr(4.4)到 Tomcat(7.0.53) http://www.linuxidc.com/Linux/2014-05/101443.htm
1、准备工作
下载安装并配置好 Tomcat 和 Maven。
准备好一个 Maven Web 项目。
2、Maven 部署 Web 项目到 Tomcat 的配置
2.1、配置 Tomcat 角色
Maven 自动部署实际上调的是 Tomcat 安装目录下的 manager 功能。而为了能正常访问 http://localhost: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
>
2.2、修改 pom.xml 增加 Tomcat Maven 插件
我使用的 Tomcat7,pom.xml 中增加如下配置:
<
properties
>
<
project.build.sourceEncoding
>UTF-8</
project.build.sourceEncoding
>
<
spring.version
>3.2.2.RELEASE</
spring.version
>
<
finalName
>web-loab</
finalName
>
</
properties
>
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>org.apache.tomcat.maven</
groupId
>
<
artifactId
>tomcat7-maven-plugin</
artifactId
>
<
configuration
>
<
url
>http://localhost:8080/manager/text</
url
>
<
server
>tomcat</
server
>
<
username
>tomcat</
username
>
<
password
>tomcat</
password
>
<
path
>/${finalName}</
path
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
上面 username、password 来自 tomcat-users.xml。server 是 Tomcat 服务器名称。path 是访问应用的路径。url 指定 Tomcat 管理页路径。
2.3、修改 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 与 2.2 中的 server 相同
2.4、部署项目到 Tomcat
先确保 Tomcat 服务器已经启动,然后 cd 到项目根目录,运行下面的命令:
mvn clean tomcat7:redeploy
部署成功,如下:
然后我们就能在 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 等。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-10/107908p2.htm
3、踩过的坑
光看上面的过程,似乎非常顺畅,但世上的事总是不会那么顺利的。下面列举几个我踩过的坑。
3.1、Windows 系统下,redeploy 过程无法删除旧项目的目录
报错信息在 $TOMCAT_HOME/logs 下的 catalina 日志文件中, 如下:
信息: Undeploying context [/web-loab]
十月 11, 2014 3:52:26 下午 org.apache.catalina.startup.ExpandWar deleteDir
严重: [D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF] could not be completely deleted. Th
大概是因为 Tomcat 还在使用这个目录,无法删除,必须修改$TOMCAT_HOME/conf/context.xml:
<Context antiJARLocking=”true” antiResourceLocking=”true”>
3.2、Servelt.class offending
这个问题应该不属于本文主题范畴了,但可能因为这个导致 Web 项目启动起来却无法访问,报错信息如下:
十月 11, 2014 3:46:29 下午 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF\lib\servlet-api-6.0.29.jar
原因是 webapps 目录下的某个 Web 项目的 WEB-INF/lib 目录下有 servlet-api.jar,删除之,并在 pom.xml 中指定 servelt-api.jar 的 scope 为 provided:
<
dependency
>
<
groupId
>org.apache.tomcat</
groupId
>
<
artifactId
>servlet-api</
artifactId
>
<
version
>6.0.29</
version
>
<
scope
>provided</
scope
>
</
dependency
>
3.3、版本问题
确保 Web 项目的 Java Build Path 使用的 JDK 版本、Java Compiler 的编译 JDK 版本以及 Project Facets 里的 Java 版本一致。
如果用的 Tomcat6,则 pom.xml 中配置 tomcat6-maven-plugin,如果用的 tomcat7 则用 tomcat7-maven-plugin。或者默认用 tomcat-maven-plugin。
4、有关使用 Tomcat Maven 插件部署项目的一些建议
这种方案能够实现持续快捷部署。但它有一些局限性:
要求从本地开发环境能直接访问 Tomcat 服务器所在网段
不能保留历史部署包
因此初步建议只在开发环境使用这种部署方式,并且结合 SVN、Git 等版本控制软件做两个内部约定:
所有可部署版本代码都必须先签入一个名为 deploy-xx 的分支,xx 表示当前可部署版本,然后切到 deploy-xx 分支再部署项目
以后增加了新功能,则需新建另一个 deploy 分支,并增大版本号。这样可以利用版本控制软件帮我们保留历史可部署代码(解决了上面提到的第二个局限性)。尤其是多个项目集成时,最好保证每一次集成时各个项目的 deploy 分支带的版本后缀相同。这样可以方便各个项目代码集体回滚
完!
Linux 下 Apache 与多个 Tomcat 集群负载均衡 http://www.linuxidc.com/Linux/2012-01/51731.htm
Nginx Tomcat 集群负载均衡解决笔记 http://www.linuxidc.com/Linux/2013-07/86827.htm
实例详解 Tomcat 组件安装 +Nginx 反向代理 Tomcat+Apache 使用 mod_jk 和 mod_proxy 反向代理和负载均衡 http://www.linuxidc.com/Linux/2013-06/85290.htm
CentOS 6.5 下利用 Rsyslog+LogAnalyzer+MySQL 部署日志服务器 http://www.linuxidc.com/Linux/2014-06/103836.htm
Apache+Tomcat 环境搭建(JK 部署过程)http://www.linuxidc.com/Linux/2012-11/74474.htm
Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-10/107908.htm
我在平时工作中部署 Web 项目到测试服务器上的 Tomcat 时用的是 Hudson。Hudson 本身已经跟 SVN、Git、Maven 集成并且支持添加各种插件。但如果使用 Hudson,我需要配置两个任务:一个任务负责打包项目成 WAR,另外一个任务负责部署打包好的 WAR 包到目标服务器的 Tomcat 上。虽然任务只需要配置一次,但每次修改代码提交后,都得切换到浏览器点 Hudson 构建任务页面上的 Build Now 按钮,然后还得跳转到另一个页面观察是否有报错。烦不胜烦,偶然发现 Tomcat Maven 插件支持直接部署项目到 Tomcat 中,尝试一番后终于搞定,总结于此。
网上关于这个主题的文章也不少,过程也大同小异,但本文最主要的是想记录下我在此过程中踩过的坑和关于这种部署方案的建议。
Maven 权威指南_中文完整版清晰 PDF http://www.linuxidc.com/Linux/2014-06/103690.htm
Maven 3.1.0 发布,项目构建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm
Linux 安装 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm
Maven3.0 配置和简单使用 http://www.linuxidc.com/Linux/2013-04/82939.htm
Ubuntu 下搭建 sun-jdk 和 Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm
Maven 使用入门 http://www.linuxidc.com/Linux/2012-11/74354.htm
在 Ubuntu 12.04 LTS 上通过 Tomcat 部署 Solr 4 http://www.linuxidc.com/Linux/2012-09/71158.htm
Ubuntu 下部署 Solr(4.4)到 Tomcat(7.0.53) http://www.linuxidc.com/Linux/2014-05/101443.htm
1、准备工作
下载安装并配置好 Tomcat 和 Maven。
准备好一个 Maven Web 项目。
2、Maven 部署 Web 项目到 Tomcat 的配置
2.1、配置 Tomcat 角色
Maven 自动部署实际上调的是 Tomcat 安装目录下的 manager 功能。而为了能正常访问 http://localhost: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
>
2.2、修改 pom.xml 增加 Tomcat Maven 插件
我使用的 Tomcat7,pom.xml 中增加如下配置:
<
properties
>
<
project.build.sourceEncoding
>UTF-8</
project.build.sourceEncoding
>
<
spring.version
>3.2.2.RELEASE</
spring.version
>
<
finalName
>web-loab</
finalName
>
</
properties
>
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>org.apache.tomcat.maven</
groupId
>
<
artifactId
>tomcat7-maven-plugin</
artifactId
>
<
configuration
>
<
url
>http://localhost:8080/manager/text</
url
>
<
server
>tomcat</
server
>
<
username
>tomcat</
username
>
<
password
>tomcat</
password
>
<
path
>/${finalName}</
path
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
上面 username、password 来自 tomcat-users.xml。server 是 Tomcat 服务器名称。path 是访问应用的路径。url 指定 Tomcat 管理页路径。
2.3、修改 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 与 2.2 中的 server 相同
2.4、部署项目到 Tomcat
先确保 Tomcat 服务器已经启动,然后 cd 到项目根目录,运行下面的命令:
mvn clean tomcat7:redeploy
部署成功,如下:
然后我们就能在 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 等。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-10/107908p2.htm