之前就知道ANT这个小蚂蚁,一直没有用过,这两天,下了点功夫,写了一个ANT的脚本。功能还行,可以完成同步svn代码、编译代码、打包代码、上传、部署的功能。
直接上干货,看代码。
[code]
#JDK home
jdk.home=/opt/Java/jdk1.6.0_33
#webapp name
webapp.name=pmeapp
project.name=pmeapp
#svn
svn.url=http://127.0.0.1:9344/svn/pmeapp/trunk
svn.uname=dapeng
svn.pwd=dapengpwd
#war
war.exclude=
war.exclude.classes=
#ftp
ftp.server=127.0.0.1
ftp.password=dapengpwd
ftp.userid=dapeng
ftp.path=/opt/ftp/
#ssh
ssh.host=127.0.0.1
ssh.path=/opt/tomcat6/webapps
ssh.pwd=dapengpwd
ssh.uname=dapeng
#ssh
ssh.path.webapp=/opt/tomcat6/webapps
ssh.server.bin=/opt/tomcat6/bin
ssh.cmd.sshClean=rm -rf /opt/tomcat6/webapps/${webapp.name}/
ssh.server.start=/opt/tomcat6/bin/startup.sh
ssh.server.stop=/opt/tomcat6/bin/shutdown.sh
[/code]
另外一个是关键中的核心
[sourcecode]
<project basedir=’.’ default=’usage’ name=’${project.name}’>
 <!– =================================================================== –>
 <!– 下句是import进ant属性配置文件,properties文件里存放基本的配置变量. –>
 <!– 该变量可以在build.xml中直接引用. –>
 <!– =================================================================== –>
 <property file=’ant.properties’/>
 <!– =================================================================== –>
 <!– 以下的几个属性是系统自带的,初始了tstamp之后,它们就有值了 –>
 <!– ${DSTAMP} ${TSTAMP} ${TODAY} –>
 <tstamp/>
 <property name=’war.name’ value=’${webapp.name}’ />
 <!– =================================================================== –>
 <!– Init –>
 <!– =================================================================== –>
 <target name=’init’>
 <echo message=’————————————-‘/>
 <echo message=’start ant build ${project.name} – ${DSTAMP}${TSTAMP}’/>
 <property name=’debug’ value=’off’/>
 <property name=’optimize’ value=’on’/>
 <property name=’deprecation’ value=’on’/>
 <!– java源文件路径 –>
 <property name=’src.dir’ value=’${basedir}/src’/>
 <!– jar包路径 –>
 <property name=’lib.dir’ value=’${basedir}/WebRoot/WEB-INF/lib’/>
 <!– webapp路径 –>
 <property name=’webapp.dir’ value=’${basedir}/WebRoot’/>
 <!– 准备源文件路径 –>
 <property name=’build.src’ value=’${basedir}/AntBuild/build’/>
 <!– 编译源文件路径 –>
 <property name=’build.dest’ value=’${basedir}/AntBuild/bin’/>
 <!– 准备webapp文件路径 –>
 <property name=’buildwar.dest’ value=’${basedir}/AntBuild/warsrc’/>
 <!– 打包war文件路径 –>
 <property name=’war.dest’ value=’${basedir}/AntBuild/war’/>
 <!– jre lib路径 –>
 <property name=’jre.lib’ value=’${jdk.home}/jre/lib’/>
 <!– 引用svn task文件,使用svn任务可以使用–>
 <typedef resource=’org/tigris/subversion/svnant/svnantlib.xml’ />
 <!– 设置svn相关属性 –>
 <svnSetting id=’svn.setting’ svnkit=’true’ username=’${svn.uname}’ password=’${svn.pwd}’ javahl=’false’ />
 <!– classpath –>
 <path id=’classpath’>
 <!–web.lib–>
 <fileset dir=’e:/lib’>
 <include name=’/*.jar’/>
 </fileset>
 <fileset dir=’${jre.lib}’>
 <include name=’/.jar’/>
 </fileset>
 <fileset dir=’${lib.dir}’>
 <include name=’**/.jar’/>
 </fileset>
 <!–<pathelement location=’lib/‘/>–>
 </path>
 </target>
 <!– =================================================================== –>
 <!– checkout –>
 <!– =================================================================== –>
 <target name=’checkout’ depends=’init’>
 <echo message=’————————————-‘/>
 <echo message=’start checkout ${project.name} – ${DSTAMP}${TSTAMP}’/>
 <svn refid=’svn.setting’>
 <checkout url=’${svn.url}’ revision=’HEAD’ destPath=’.’ />
 </svn>
 </target>
 <!– =================================================================== –>
 <!– 编译源文件–>
 <!– =================================================================== –>
 <target name=’build’ depends=’checkout’>
 <echo message=’————————————-‘/>
 <echo message=’start build ${project.name} – ${DSTAMP}${TSTAMP}’/>
 <mkdir dir=’${buildwar.dest}/WEB-INF/classes’/>
 <delete>
 <fileset dir=’${buildwar.dest}/WEB-INF/classes’ includes=’/.‘/>
 </delete>
 <javac srcdir=’${src.dir}’ destdir=’${buildwar.dest}/WEB-INF/classes’ debug=’${debug}’ optimize=’${optimize}’ includeantruntime=’on’>
 <classpath refid=’classpath’/>
 </javac>
 <copy todir=’${buildwar.dest}/WEB-INF/classes’>
 <fileset dir=’${src.dir}’>
 <include name=’/.‘/>
 <exclude name=’/*.java’/>
 </fileset>
 </copy>
 </target>
 <!– =================================================================== –>
 <!– 打war包–>
 <!– =================================================================== –>
 <target name=’war’ depends=’build’>
 <echo message=’————————————-‘/>
 <echo message=’start war ${project.name} – ${DSTAMP}${TSTAMP}’/>
 <delete>
 <fileset dir=’.’ includes=’/*.war’/>
 </delete>
 <!–needxmlfile 设为false才不会报错 web.xml不存在 ant会报错–>
 <war destfile=’${war.name}.war’ needxmlfile=’false’>
 <!– <lib dir=’${basedir}/WebRoot/WEB-INF/lib’/> –>
 <classes dir=’${buildwar.dest}/WEB-INF/classes’ excludes=’${war.exclude.classes}’/>
 <fileset dir=’${webapp.dir}’ excludes=’${war.exclude}’/>
 </war>
 </target>
 <!– =================================================================== –>
 上传本地文件到远程服务器,执行远程命令
 <!– =================================================================== –>
 <target name=’ssh’ depends=’war’>
 <echo message=’————————————-‘/>
 <echo message=’start ssh ${project.name} – ${DSTAMP}${TSTAMP}’/>
 <!–上传–>
 <scp file=’${basedir}/${war.name}.war’ todir=’${ssh.uname}:${ssh.pwd}@${ssh.host}:${ssh.path}’ trust=’true’/>
 </target>
 <!– =================================================================== –>
 <!– 停止服务器–>
 <!– =================================================================== –>
 <target name=’stop’ depends=’ssh’>
 <echo message=’————————————-‘/>
 <echo message=’stop server – ${DSTAMP}${TSTAMP}’/>
 <sshexec host=’${ssh.host}’ username=’${ssh.uname}’ password=’${ssh.pwd}’ port=’22’ trust=’true’ verbose=’true’ command=’${ssh.server.stop}’/>
 </target>
 <!– =================================================================== –>
 <!– 启动服务器–>
 <!– =================================================================== –>
 <target name=’start’ depends=’stop’>
 <echo message=’————————————-‘/>
 <echo message=’start server – ${DSTAMP}${TSTAMP}’/>
 <sshexec host=’${ssh.host}’ username=’${ssh.uname}’ password=’${ssh.pwd}’ port=’22’ trust=’true’ verbose=’true’ command=’${ssh.server.start}’/>
 </target>
 <!– =================================================================== –>
 <!– 清除临时文件–>
 <!– =================================================================== –>
 <target name=’clean’ depends=’init’>
 <echo message=’————————————-‘/>
 <echo message=’start clean ${project.name} – ${DSTAMP}${TSTAMP}’/>
 <delete includeemptydirs=’true’>
 <fileset dir=’${basedir}’ excludes=’ant.properties,build.xml’/>
 </delete>
 </target>
</project>
[/sourcecode]
注释写的还算详细哈!
ANT的配置网上一大堆,google一下就知道了(有时宁愿用有道,也不愿意用百度)。
想起之前svn下载、编译、上传、部署全部手动操作,唉!
现在,一个命令搞定,好舒服!
构建工具,还有另外一种选择,使用MAVEN,MAVEN更是一种更优秀的构建工具,也推荐学习一下的。
多学习一种是好事哈!不能总用过myeclipse就行吧!目前我的系统采用的是linuxdeepin,基本都能满足我的日常使用了,下次有机会再介绍我的linux经历史了。