Ant远程部署到Tomcat

烈酒焚心 提交于 2019-12-07 01:43:11

本文涉及的工具

Eclipse4.5.2

Ant1.9.6(Eclipse自带的插件)

jsch-0.1.53(直接点击可以打开下载页面)

具体步骤如下

1.创建build.xml文件

在项目中添加build.xml文件,build.xml是ant默认的文件名,可以修改为其他的名字,不影响Ant脚本的执行,如下图,build.xml和build-webdemo.xml都可以作为Ant脚本。

2.修改build.xml文件

可以参考下面的文件,根据具体情况修改远程主机账号密码和tomcat部署的路径

请确定远程的Tomcat中包含相应的目录,例如本例中的/opt/tomcat7/webapps/demo

不然会提示目录不存在,特别是webapps后面的路径,必须存在,如果不存在,需要先手动创建相应的文件夹,当然你也可以完善一下Ant脚本,先执行一个远程命令,创建相应的文件夹。

<?xml version="1.0" encoding="UTF-8"?>
<!--
使用该脚本是用有些前置条件。
本脚本适用于eclipse或者myeclipse环境中使用
编译文件的默认输出目录为
WebContent/WEB-INF/classes
如果不确定,可以先查看项目java build path 的default output folder

请确定项目已经build过,或者执行该ant脚本之前手动执行build

执行前,请确定是否使用jdk1.7编译的class代码

可以根据项目的名字不同,修改property里面的value值
-->
<project name="demo" default="war">

	<property name="war.name" value="${ant.project.name}"/>
	<property name="jar.name" value="${ant.project.name}-api.jar"/>
	<property name="tomcat.home" value="/opt/tomcat7"/>
	<property name="tomcat.webapps.context" value="${ant.project.name}"/>
	<property name="remote.host" value="192.168.1.110"/>

	
	<!-- 格式化时间 -->
	<tstamp>
		<format property="fdate" pattern="yyyyMMddHHmmss"/>
	</tstamp>
	
	<available file="./WebContent/WEB-INF/classes" property="pathisexit" type="dir"/>
	
	<!-- 生成war文件 -->
	<target name="war" depends="init.test">
		<delete file="${war.name}.war" />

		<war destfile="${war.name}.war" webxml="./WebContent/WEB-INF/web.xml">
			<fileset dir="./WebContent">
				<!--
				根据需要可以适当的增减文件夹,里面是一个例子,可以参考使用,如果不配置,就是默认WebContent下面的所有文件夹和文件
				<include name="WEB-INF/classes/**/*" />
				<exclude name="WEB-INF/classes/**/*.class" />
				<include name="WEB-INF/lib/**/*" />
				<include name="WEB-INF/serviceconf/**/*" />
				-->
			</fileset>
		</war>

	</target>
	
		
	<!-- 远程传输文件夹,需要添加第三方的jar文件才能支持 -->
	<target name="remote-deploy" depends="init.test">
		<scp todir="root@${remote.host}:${tomcat.home}/webapps/${tomcat.webapps.context}" password="0EY*r6Wi" trust="true">
			<fileset dir="./WebContent"></fileset>
		</scp>
	</target>
	
	<!-- 执行脚本重启tomcat
		主意tomcat.home的属性,需要配置正确的tomcat路径
	 -->
	<target name="tomcat.restart">
		<sshexec command="${tomcat.home}/bin/catalina.sh stop -force;ps -ef | grep ${tomcat.home}| grep -v grep|awk '{print $2}'|xargs kill -9;${tomcat.home}/bin/catalina.sh start" 
			host="${remote.host}" username="root" password="0EY*r6Wi"  trust="true"/>
	</target>
	
	<target name="publish">
		<!-- 先分发软件 -->
		<antcall target="remote-deploy" />
		<!-- 然后重启tomcat -->
		<antcall target="tomcat.restart" />
	</target>
	
	<!-- 备份当前文件 -->
	<target name="bakwebapp">
		<echo>cd ${tomcat.home}/webapps;tar -zcvf ${tomcat.webapps.context}.${fdate}.tar.gz ${tomcat.webapps.context}</echo>
		<!-- 执行备份语句 -->
		<sshexec command="cd ${tomcat.home}/webapps;tar -zcvf ${tomcat.webapps.context}.${fdate}.tar.gz ${tomcat.webapps.context}" 
			host="${remote.host}" username="root" password="0EY*r6Wi" trust="true"/>
	</target>
	
	<target name="init.test" unless="pathisexit">
		<fail message="classes文件夹不存在,检查你的IDE的构建路径,本脚本仅适用于IDE环境或者你手动将代码编译到classes文件夹中"/>
	</target>
	

</project>

3.测试效果

编辑完build.xml文件后,右键执行

默认执行的war,我是考虑防止第一次使用的时候误操作,直接覆盖了远程服务器的项目,如果确定远程Tomcat的目录可以直接覆盖,在publish前面勾上,然后执行就可以了。

由于依赖jsch.jar文件,所以运行的时候需要将该文件加入到ant的classpath中,见上图,

或者可以配置Ant的运行环境。

配置完之后就可以直接点击run,控制台会提示你进度,祝你好运。

4.总结

如果需要频繁部署到远程服务器,使用这个Ant的脚本还是比较好用的,轻量级,如果是大型团队可以考虑使用其他的Paas平台。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!