前段时间用做了一个简单的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的插件。
- 步骤
- 首先安装配置好SVN服务器和ANT(具体的过程我就不累赘了)。
- 安装svnant插件,将svnant.1.3.0解压后的lib目录下所有的jar包拷贝至Ant安装目录下的lib文件夹。
- 编写脚本,如下
<project name="imweb" 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}/WebContent"/>
<!-- 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>
<!-- 引用svn task文件,使用svn任务可以使用-->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" />
<!-- 清理-->
<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只是检出最新的文件-->
<target name="checkout" depends="init">
<svn username="${svn.username}" password="${svn.password}">
<export srcUrl="${svn.url}" revision="HEAD" destPath="${project}" force="true" />
</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" failοnerrοr="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" failοnerrοr="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