本文涉及的工具
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平台。
来源:oschina
链接:https://my.oschina.net/u/1159248/blog/698223