这里介绍一种实现方法,借助SVNKit来完成。SVNKit是一个纯Java的SVN 客户端库,使用SVNKit无需安装任何SVN的客户端,支持各种操作系统。
1. 准备工作(1)下载安装Ant,Ant下载地址:http://www.apache.org/dist/ant/binaries/apache-ant-1.8.2-bin.zip。下载完后,无需安装,只需要将压缩包解压缩到一个指定目录,如C盘根目录。然后配置环境变量ANT_HOME=C:\apache-ant-1.8.2, 将%ANT_HOME%\BIN加入到Path变量。
(2)下载SVNKit,下载后解压缩,将svnkit.jar和svnkit-cli.jar文件拷贝到构建目录(如D:\build)下的子目录antlib目录下。
2. 编写build.xml文件
<?xml version="1.0" encoding="gb2312"?> <project basedir="." name="myProject" default="svnCommit"> <!-- 构建相关属性 --> <property name="dir.build" value="${basedir}\myProject"/> <property name="dir.src" value="${dir.build}\src"/> <property name="dir.web" value="${dir.build}\WebRoot"/> <property name="dir.lib" value="${dir.web}\WEB-INF\lib"/> <property name="dir.classes" value="${dir.web}\WEB-INF\classes" /> <!-- SVN相关属性 --> <property name="svn.repository" value="http://svn.xxx.com/dev/myProject"/> <property name="svn.source" value="D:\"/> <property name="svn.username" value="username" /> <property name="svn.password" value="password" /> <!-- 日期后缀 --> <tstamp prefix="myProject."> <format property="TimeSign" pattern="yyyyMMdd"/> </tstamp> <!-- 应用lib定义 --> <path id="applib"> <fileset dir="${dir.lib}"> <include name="**/*.jar"/> </fileset> </path> <!-- SVNKit相关包lib --> <path id="antlib"> <fileset dir="${basedir}/antlib"> <include name="**/*.jar"/> </fileset> </path> <!-- SVN检出项目代码(第一次时用,以后只需更新) --> <target name="svnCheckout"> <echo message="删除原始文件,重新Checkout"/> <delete dir="${dir.build}" /> <echo message="Checkout最新代码"/> <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true"> <arg value="checkout"/> <arg value="--username"/> <arg value="${svn.username}"/> <arg value="--password"/> <arg value="${svn.password}"/> <arg value="${svn.repository}/myProject"/> <classpath refid="antlib" /> </java> </target> <!-- SVN更新项目代码 --> <target name="svnUpdate" depends="prepare"> <echo message="更新代码"/> <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true"> <arg value="update"/> <arg value="--username"/> <arg value="${svn.username}"/> <arg value="--password"/> <arg value="${svn.password}"/> <arg value="${dir.build}"/> <classpath refid="antlib" /> </java> </target> <!-- 删除classes目录,为编译构建做准备 --> <target name="prepare"> <delete dir="${dir.classes}" /> </target> <!-- 编译构建项目 --> <target name="build" depends="svnUpdate,prepare"> <echo message="编译Java文件"/> <javac destdir="${dir.classes}" srcdir="${dir.src}" target="1.5" excludes="**/.svn/**"> <classpath refid="applib"/> </javac> <echo message="拷贝资源文件"/> <copy todir="${dir.classes}" preservelastmodified="true"> <fileset dir="${dir.src}"> <include name="**/*.properties"/> <include name="**/*.xml"/> </fileset> </copy> </target> <!-- 打包 --> <target name="makewar" depends="build"> <war destfile="${svn.source}/myProject${myProject.TimeSign}.war" basedir="${dir.web}"/> </target> <!-- 先添加,然后提交SVN服务器 --> <target name="svnCommit" depends="makewar"> <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true"> <arg value="add"/> <arg value="--username"/> <arg value="${svn.username}"/> <arg value="--password"/> <arg value="${svn.password}"/> <arg value="${svn.source}\myProject${myProject.TimeSign}.war"/> <classpath refid="antlib" /> </java> <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true"> <arg value="commit"/> <arg value="--username"/> <arg value="${svn.username}"/> <arg value="--password"/> <arg value="${svn.password}"/> <arg value="-m"/> <arg value='"daily build"'/> <arg value="${svn.source}\myProject${myProject.TimeSign}.war"/> <classpath refid="antlib" /> </java> </target> </project>
说明:具体build.xml文件的写法,详细请参考Ant自带的相关文档
3. 编写批处理文件build.bat
ant -f D:\build\build.xml
说明:这里使用绝对地址,是为了方便定时任务调用
4. 将build.bat添加到Windows的任务计划,大功搞成。
注意:在编译的时候,如果提示找不到类HttpServletRequest等类似问题时,需要将jsp-api.jar和servlet-api.jar文件加入到classpath