Eclipse中使用ANT实现自动从SVN
Checkout代码、编译、测试(2)
4. 从版本库checkout源文件
为了实现自动部署,往往需要从版本库中checkout出最新的代码。在Eclipse中怎样使用SVN,我会在另外一个文档里面详细说明,在此我们默认已经安装了SVN插件。此外还需要下载svnant,用来在Ant中访问SVN,我下载的svnant的版本是1.3.1,下载后解压缩在F:\Library\JavaStudio\svnant。
-
<property name="antdir" location="F:\Library\JavaStudio\svnant\lib" />
-
<property name="svn.username" value="admin" />
-
<property name="svn.password" value="123456" />
-
<property name="svn.url" value="svn://127.0.0.1/Marketplace/" />
-
<property name="svn.outdir" value="F:\src"></property>
-
-
<path id="path.svnant">
-
<fileset dir="${svnantDir}">
-
<include name="svnant.jar"/>
-
<include name="svnClientAdapter.jar"/>
-
<include name="svnjavahl.jar"/>
-
<include name="svnkit.jar"/>
-
</fileset>
-
</path>
-
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="path.svnant" />
-
-
<target name="checkout">
-
<svnSetting id="svnparams" username="${svn.username}" password="${svn.password}" javahl="false" svnkit="false"/>
-
<svn refid="svnparams">
-
<checkout url="${svn.url}" revision="HEAD" destPath="${svn.outdir}" />
-
</svn>
-
</target>
上例很简单,一看就能明白,首先我们定义了svn的用户、密码、url和checkout的目标目录,然后需要把svnant的lib下的这4个jar及svn task文件都引入进来。
利用svnant访问SVN有三种方式:commandline、javahl和svnkit,上例中使用了第一种方式,可以看到把javahl和svnkit都关闭了。事实上,可能是因为这种url方式,只能用这个方式,用其他两种方式,只能导出版本库的根目录,而不能导出根目录下的子目录,即
-
<property name="svn.url" value="svn://127.0.0.1/" />
这样是可以导出的,如果和写成和上例中一样,就会报错
目前还不确定是什么原因。
5. 编译
编译很简单,就是用javac,设置代码所在路径为源目录srcdir,编译后放置class文件的目录为目标目录destdir。如果需要添加jar包,在<javac>标签下使用子标签<classpath>,下例中因为要编译使用TestNG编写的单元测试用例,用到TestNG的jar包,所以用<classpath>标签包含进来。
-
<property name="srcdir" location="src" />
-
<property name="testdir" location="test" />
-
<property name="compileDir" location="build/classes" />
-
<property name="libDir" location="WebContent/WEB-INF/lib" />
-
<property name="testngLib" location="${libDir}/testngLib" />
-
-
<target name="compile" depends="init">
-
<javac srcdir="${srcDir}" destdir="${compileDir}" includeantruntime="false" />
-
<javac srcdir="${testDir}" destdir="${compileDir}" includeantruntime="false">
-
<classpath>
-
<pathelement path="${testngLib}\testng.jar"/>
-
</classpath>
-
</javac>
-
</target>
6. 单元测试(TestNG)
我使用了TestNG写单元测试用例,要自动运行这些测试用例,首先要定义TestNG Task。Ant为第三方扩展提供了一个类Task,所有的第三方自定义的Task类都必须继承自Ant的这个Tack类。TestNG的Task类就是TestNGAntTask。
-
<taskdef name="testng" classname="org.testng.TestNGAntTask">
-
<classpath>
-
<pathelement path="${testngLib}\testng.jar"/>
-
</classpath>
-
</taskdef>
执行测试用例,需将TestNG的jar包等都包含进来,设置测试结果输出目录、TestNG配置文件。
-
<property name="srcdir" location="src" />
-
<property name="testdir" location="test" />
-
<property name="compileDir" location="build/classes" />
-
<property name="libDir" location="WebContent/WEB-INF/lib" />
-
<property name="testngLib" location="${libDir}/testngLib" />
-
-
<path id="classpath.test">
-
<fileset dir="${testngLib}">
-
<include name="**/*.jar" />
-
</fileset>
-
<fileset dir="${libDir}">
-
<include name="**/*.jar" />
-
</fileset>
-
<pathelement location="${compileDir}" />
-
<pathelement location="${testDir}" />
-
<pathelement location="${srcDir}" />
-
</path>
-
-
<target name="test" depends="compile">
-
<testng outputdir="test-output" classpathref="classpath.test">
-
<xmlfileset dir="${srDdir}" includes="testng.xml"/>
-
</testng>
-
</target>
7. 打包
打包的结果jar包名,加入了日期。
-
<target name="package" depends="compile">
-
<tstamp></tstamp>
-
<jar destfile="EMS${DSTAMP}.jar" basedir="${compileDir}" />
-
</target>
8. 替换指定文件中字符串
部署的时候,经常需要替换配置文件中的一些配置项的值,如服务器IP、数据库IP,这些每个环境都会不同。下面的例子就是用来演示这样的一个场景。
-
<property name="destServerIP" value="172.16.210.127" />
-
<property name="srcServerIP" value="172.16.210.147" />
-
<property name="destDBIP" value="172.16.210.91" />
-
<property name="srcDBIP" value="172.16.210.144" />
-
<property name="destFile" location=" F:\EMS\config \config.xml" />
-
-
<target name="replaceIP">
-
<replace file="${destFile}" token="${srcServerIP}" value="${destServerIP}" />
-
<replace file="${destFile}" token="${srcDBIP}" value="${destDBIP}" />
-
</target>
参考资料
1. 北京圣思园Ant深入详解视频 张龙
2. 用ant脚本checkout svn项目 http://xiaohu0901.iteye.com/blog/891077
3. Ant构建工具(从SVN下载项目,编译,到tomcat下运行项目) http://blog.csdn.net/rose19891213/article/details/6085899
4. ant 实现svn checkout代码 + Junit测试生成报告 + ftp上传 + 发邮件
http://blog.csdn.net/grhlove123/article/details/7712630
5. SVNAnt 配置的入门例子 http://blog.csdn.net/zuoluoboy/article/details/21105347
阅读(2227) | 评论(0) | 转发(0) |