eclipse中使用ant将web项目打包、远程备份线上项目、远程更新项目
测试于:Eclispe Indigo
build_war.xml(放在项目根目录下即可)
<?xml version="1.0" encoding="UTF-8"?> <project name="remote" default="clean" basedir="."> <property name="project.name" value="basic" /> <property name="dist.dir" value="${basedir}/dist" /> <property name="class.dir" value="${basedir}/build/classes" /> <property name="exclude.dir" value="WEB-INF/lib/" /> <property name="host" value="30.17.150.22" /> <property name="port" value="12306" /> <property name="user" value="devnote" /> <property name="password" value="123" /> <property name="tomcat.dir" value="/opt/tomcat" /> <property name="backup.dir" value="/mnt/backup/tomcat" /> <!-- 获取当前时间,项目备份时使用 --> <tstamp> <format property="time" pattern="yyyy.MM.dd-HH:mm" locale="us"/> </tstamp> <target name="init"> <echo message="初始化本地发布目录" /> <mkdir dir="${dist.dir}" /> </target> <target name="package" depends="init"> <echo message="将项目打成war包" /> <war basedir="${basedir}/WebContent" destfile="${dist.dir}/${project.name}.war" webxml="${basedir}\WebContent\WEB-INF\web.xml"> <classes dir="${class.dir}"/> <exclude name="${exclude.dir}"/> <excludes/> </war> </target> <target name="backup" depends="package"> <echo message="备份线上项目" /> <sshexec host="${host}" port="${port}" username="${user}" password="${password}" trust="yes" command="cp -r ${tomcat.dir}/webapps/${project.name} ${backup.dir}/${project.name}-${time}" /> </target> <target name="upload" depends="package"> <echo message="上传war包" /> <scp file="${dist.dir}/${project.name}.war" trust="true" todir="${user}:${password}@${host}:~" port="${port}" /> </target> <target name="integrate" depends="upload"> <echo message="整合服务器上的lib包" /> <sshexec host="${host}" port="${port}" username="${user}" password="${password}" trust="yes" command="rm -rf ~/${project.name}; unzip -d ~/${project.name} ~/${project.name}.war > /dev/null 2>&1; cp -r ~/lib/ ~/${project.name}/WEB-INF/; rm -rf ~/${project.name}.war" /> </target> <target name="clean" depends="integrate"> <echo message="删除本地发布目录" /> <delete dir="${dist.dir}" /> </target> </project>
流程简述:
提前将项目用的lib包放到线上,每次打包排除掉这些lib,然后到线上之后再组装,这样能省很多时间。
注意事项:
- 如果eclipse首次使用ant,可能会因为脚本中使用了sshexec但却没有相应包而报异常,解决方案见:
Problem: failed to create task or type sshexec Could not load a dependent class com.jcraft.jsch.Logger - 本脚本适用于eclipse项目结构,如果您设置过classpath或者结果不同于如下截图,请据实际调整
- 如果是首次部署,线上tomcat的webapps下没有对应的项目,备份命令会报异常终止脚本执行,
可以临时设置sshexec的command="" - <project name="remote" default="startuptomcat" basedir=".">中的default一定要设置最后一个
执行的target,这样才能保证脚本顺利的执行到最后
eclipse console效果:
线上备份目录效果: