前段時間用做了一個簡單的web api服務,在調試的過程中感覺到手動發布實在是效率低而且容易出錯,於是花點時間搞了一下ant+svn+tomcat的自動構建,效果不錯,今天拿出來分享一下。
- 准備工作
SVN服務器:VisualSVN-Server-2.5.8.msi,這windows下比較好用的一個svn服務端,安裝和配置都很簡單。
Ant: Ant 1.7(我用的比較老的版本)。
Ant插件:svnant1.3(http://subclipse.tigris.org/svnant.html), ANT集成SVN的插件。
需要安裝Subversion。http://subversion.apache.org/download/#pre-releases
- 步驟
- 首先安裝配置好SVN服務器和ANT(具體的過程我就不累贅了)。
- 安裝svnant插件,將svnant.1.3.0解壓后的lib目錄下所有的jar包拷貝至Ant安裝目錄下的lib文件夾。
- 編寫腳本,如下
build.xml
<project name="daka_main" basedir="."> <!--############################################################項目目錄 --> <!--項目根--> <property name="project" value="project" /> <property name="src" value="${project}/src" /> <property name="resources" value="${project}/src"/> <property name="test" value="${project}/test"></property> <property name="target" value="${project}/target"></property> <property name="main-target" value="${project}/target/classes"/> <property name="test-target" value="${project}/target/test-classes"/> <!--web 目錄 --> <property name="web-root" value="${project}/WebRoot"/> <!-- ant 屬性文件 --> <property file="build.properties"/> <!--############################################################軟件依賴 --> <!--ant lib目錄--> <property name="ant-lib" value="${ant.home}/lib"/> <!-- tomcat lib目錄 --> <property name="tomcat-lib" value="${tomcat.home}/lib"/> <!-- 定義classpath--> <path id="classpath"> <fileset dir="${ant-lib}" includes="***.jar"></fileset> <fileset dir="${tomcat-lib}" includes="***.jar"></fileset> <fileset dir="${web-root}/WEB-INF/lib" includes="***.jar"></fileset> </path> <!-- 清理--> <target name="clean"> <delete dir="${project}"></delete> </target> <!-- 初始化--> <target name="init" depends="clean"> <mkdir dir="${project}"/> <mkdir dir="${main-target}"/> <mkdir dir="${test-target}"/> </target> <!-- 檢出代碼 這里使用 export 不是checkout 二者區別 checkout會svn相關信息文件檢出,export只是檢出最新的文件--> <path id="path.svnant"> <fileset dir="${basedir}"> <include name="**/*.jar"/> </fileset> </path> <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="path.svnant"/> <target name="checkout" depends="init"> <svnSetting id="svnparams" username="${svn.username}" password="${svn.password}" javahl="false"/> <svn refid="svnparams"> <checkout url="${svn.url}" destPath="${project}" /> </svn> </target> <!-- 編譯 --> <target name="compile" depends="checkout"> <javac srcdir="${src}" destdir="${main-target}" encoding="UTF-8" includeAntRuntime="false"> <classpath refid="classpath"></classpath> </javac> <copy todir="${main-target}"> <fileset dir="${resources}"> <exclude name="sql/**"/> </fileset> </copy> </target> <!-- 打war包 --> <target name="build" depends="compile"> <war destfile="${target}/${deploy.name}.war" webxml="${web-root}/WEB-INF/web.xml"> <fileset dir="${web-root}"></fileset> <classes dir="${main-target}"></classes> </war> <delete dir="${main-target}"></delete> <delete dir="${test-target}"></delete> </target> <!--shutdowntomcat --> <target name="shutdowntomcat" description="========shutdowntomcat==========="> <echo message="正在關閉服務器。。。" /> <exec executable="${tomcat.home}/bin/shutdown.bat" failonerror="false"></exec> <echo message="服務器成功關閉" /> <sleep seconds="10"/> <!-- 刪除之前解壓的war包--> <delete dir="${tomcat.home}/webapps/${deploy.name}"></delete> </target> <!--startuptomcat --> <target name="startuptomcat" description="========startuptomcat==========="> <sleep seconds="5"/> <echo message="正在啟動服務器。。。" /> <exec executable="${tomcat.home}/bin/startup.bat" failonerror="false"></exec> <echo message="服務器啟動成功" /> </target> <!--部署到tomcat下面 --> <target name="deploy" depends="build"> <ant target="shutdowntomcat"/> <copy file="${target}/${deploy.name}.war" todir="${tomcat.home}/webapps" /> <ant target="startuptomcat"/> </target> </project>
build.properties文件如下:
- tomcat.home=D:/apache-tomcat-6.0.35
- ant.home=D:/apache-ant-1.7.1
- svn.url=https://hjt2012.com/svn/java/branches/imweb
- svn.username=svn
- svn.password=123456
- deploy.name=imweb
- 執行腳本
可以編寫一個bat批處理文件,這樣在執行的時候只需要雙擊一下就可以完全搞定。
bat文件如下:
- @echo off
- d:
- cd imweb
- ant deploy
- exit