利用ant将Web项目部署至远程Tomcat

时间:2021-11-17 08:56:10

首先介绍下适用情形,Tomcat服务器位于另一台主机,同时数据库也在该主机之上,在将项目部署到远程Tomcat上之前自己一直是适用本地Tomcat进行测试的,但由于需要执行shell脚本,所以需要将项目部署到远程服务器上。

远程计算机环境:CentOS Tomcat6 mysql jdk1.6.0

本地环境:Windows7 MyEclipse8.5(已经附带了Ant插件) jdk1.6.0 

变量约定(需要根据你的安装情况代入具体值): CATALINA_HOME="/workspace/apache-tomcat-6.0.24"  (远程tomcat的安装路径)  ANT_HOME="C:\Users\xuyongjia\AppData\Local\Genuitec\Common\plugins\org.apache.ant_1.7.1.v20090120-1145"(本地MyEclipse的ANT插件目录)

 部署至远程Tomcat的方法有两种:手动上传部署和利用脚本自动部署(当然,本质是一种,只是根据手续繁简这么分)。这两种方法的第一步都需要向Tomcat的配置文件添加可以远程上传项目的账号。

1.向Tomcat添加可以远程上传项目的账号

 需要编辑$CATALINA_HOME/config/tomcat-users.xml,加入新用户信息,例如 <user name="forupload" password="forupload" roles="manager" />,修改后重启Tomcat。tomcat-users.xml修改后如图(我添加了两个,一个就足够了):

利用ant将Web项目部署至远程Tomcat 

 重启Tomcat后,远程访问 http://{远程服务器ip:port}/manager/html,我所需访问的是http://192.168.1.126:8080/manager/html,这时会需要填入上传用户的用户名和密码,输入刚才所添加的用户名密码,如图:

利用ant将Web项目部署至远程Tomcat

如果可以正常跳转,就完成了服务器端的配置。

2.上传Web项目至远程Tomcat:

(1)方式一,手动上传(不使用Ant,直接上传war):

a.在MyEclipse中,右键项目->Export(导出)->Java EE(如果有EJB貌似要选择EAR,由于自己没有使用EJB所以直接选择了WAR)->WAR FILE->Next->选择要导出的项目->选择导出地址->Finish;

b.在成功跳转http://192.168.1.126:8080/manager/html(需要修改成你的IP、port)后,在该页面的下方有一处“WAR file to deploy”,选择刚才导出的文件并点击“Deploy”按钮,点击后,如果在网页的上部没有出错信息,且在上传的项目已在“Applications”的列表中,就说明部署成功,效果如图:

利用ant将Web项目部署至远程Tomcat

c.输入连接,该项目已可正常访问:

利用ant将Web项目部署至远程Tomcat

 

(2)方式2,利用Ant脚本上传:

 

a.将$CATALINA_HOME/lib/catalina-ant.jar复制到本地的$ANT_HOME/lib目录下(可以直接在本地备一份Tomcat,方便使用,并不一定非从服务器拷贝);

b.将该catalina-ant.jar添加到MyEclipse的ant的classpath中(windows-->preferences-->Ant-->runtime-->classpath->Global Entries->Add External JARs),效果如图:

利用ant将Web项目部署至远程Tomcat

c.在项目的根目录下新建build.xml文件,并填入内容。

其中有几处需要按自己的项目进行修改:

  • path:用于回头访问该项目的后缀路径:  http://ip:port/path
  • url:远程Tomcat的管理页面路径 http://ip:port/manager
  • username、password 这个是填写你所设的上传用户的账号和密码
<project name="TestWeb" default="redeploy" basedir=".">
 
<!-- Configure the directory into which the web application is built -->
<property name="build" value="${basedir}/WebRoot/WEB-INF/classes" />
<property name="dist.dir" value="${basedir}/dist" />
 
<!-- Configure the context path for this application -->
<property name="path" value="/TestWeb" />
 
<!-- Configure properties to access the Manager application -->
<property name="url" value="http://192.168.1.126:8080/manager" />
<property name="username" value="forupload" />
<property name="password" value="forupload" />
 
<!-- Configure the custom Ant tasks for the Manager application -->
    <target name="_def_tomcat_tasks">           
        <!-- tasks: deploy,undeploy,reload,stop,start,list,roles,resources -->          
        <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask" />           
        <taskdef name="list"      classname="org.apache.catalina.ant.ListTask" />           
        <taskdef name="reload"    classname="org.apache.catalina.ant.ReloadTask" />           
        <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask" />  
        <taskdef name="roles"     classname="org.apache.catalina.ant.RolesTask" />           
        <taskdef name="start"     classname="org.apache.catalina.ant.StartTask" />          
        <taskdef name="stop"      classname="org.apache.catalina.ant.StopTask" />           
        <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask" />   
</target> 
 
<!-- Executable Targets -->

<target name="compile" description="WebSip manage">
    <mkdir dir="${dist.dir}"/> 
    <war destfile="${dist.dir}/TestWeb.war" webxml="WebRoot/WEB-INF/web.xml">
        <classes dir="WebRoot/WEB-INF/classes" />
         <fileset dir="WebRoot" excludes="WEB-INF/**" />
         <lib dir="WebRoot/WEB-INF/lib" />
    </war>
</target>
 
<target name="redeploy" description="Remove and Install web application" depends="_def_tomcat_tasks">   
    <antcall target="undeploy"/>         
    <antcall target="deploy"/>   
</target> 
    
    
<target name="deploy" description="Install web application" depends="_def_tomcat_tasks,compile">
    <deploy url="${url}" username="${username}" password="${password}" path="${path}" war="${dist.dir}/TestWeb.war" />
</target>
 
<target name="undeploy" description="Remove web application" depends="_def_tomcat_tasks">
    <undeploy url="${url}" username="${username}" password="${password}" path="${path}" />
</target>
    
<target name="reload" description="Reload web application" depends="_def_tomcat_tasks,compile">     
    <reload  url="${url}" username="${username}" password="${password}" path="${path}"/>  
</target> 
    
</project>

在MyEclipse中右键build.xml->Run as->Ant Build,如果看成功消息,就说明成功部署了,如图:
利用ant将Web项目部署至远程Tomcat

利用ant将Web项目部署至远程Tomcat

当对项目做出修改后(要先Build Project,或者Build Automatically),重新右键build.xml->Run as即可。

 

总结下:第一种方法适合偶尔需要部署项目的情况,第二种适合开发时需要经常重新部署项目的情况 。

 

  

本篇博文参考了:

http://www.24xuexi.com/w/2011-05-27/90459.html

http://code.google.com/p/rapid-framework/source/browse/trunk/rapid-framework/build-tomcat-deploy.xml?r=3657