原文出处:[url]http://www.wangchao.net.cn/bbsdetail_180721.html[/url] 我是抄袭过来,留作以后查看
Using SVN with Ant
摘要:
Subversion是越来越被广泛使用的版本管理工具,使用Ant脚本从Subversion获取代码,实现Daily Build。
1.Subversion概述
先引用[url=http://svnbook.red-bean.com/nightly/en/svn-book.html]Version Control with Subversion[/url] 中开头的话:
“If C gives you enough rope to hang yourself, think of Subversion as a sort of rope storage facility.”
—Brian W. Fitzpatrick
然后告诉大家CVS是旧爱,Subversion是新欢。列举若干Subversion的特性和优势为证,懒得写了,直接看这里:[url=http://subversion.tigris.org/]Subversion的老家[/url]。
关于如何使用Subversion以及相关客户端软件,网上慢慢看吧,[url=http://svnbook.red-bean.com]官方自由图书[/url]不错。
2.蚂蚁出场
团队最近的项目中即使用Subversion作为版本控制工具。Daily Build过两天就得搭建起来了,上蚂蚁!
Tigris.org提供了Subclipse,SvnClientAdapter和SvnAnt。(见[url=http://subclipse.tigris.org/index.html]这里[/url])
Subclipse是一个Eclipse的插件,实现了IDE与Subversion得集成;
SvnClientAdapter是Subversion的一套Java API,封装了客户端对Subversion的一些访问操作;
SvnAnt是用于访问Subversion的Ant任务,其依赖于SvnClientAdapter。
我要用的就是SvnAnt,用SVN Check Out一份SvnAnt的代码:
svn co http://subclipse.tigris.org/svn/subclipse/trunk/svnant/ svnant
在这个工程里面还包括svnant的Ant Task使用说明文档,也可以在[url=http://subclipse.tigris.org/svn/subclipse/branches/svnant/1.0.x/doc/svn.html]这里[/url]直接查看。
使用其中的build.xml编译SvnAnt后,在新生成的build子目录下会生成svnant.jar。按照官方文档的说法,把这个svnant.jar和SvnAnt工程的lib目录下的svnClientAdapter.jar和svnjavahl.jar拷贝到Ant的目录下即可。然后编写如下的Ant脚本进行测试:
<?xml version="1.0"?>
<project name="SVN Ant Test" default="checkout" basedir=".">
<!-- 1 -->
<property name="remote.url"
value="svn://16.157.xxx.xxx/trunk/LNPORTAL/src/P3UIPAdapter/" />
<property name="local.dir" value="local" />
<!-- 2 -->
<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask" />
<target name="prepare"
description="Prepare the dirs for other tasks">
<delete dir="${local.dir}" />
<mkdir dir="${local.dir}" />
</target>
<!-- 3-->
<target name="checkout" depends="prepare">
<svn javahl="true" username="lihq" password="password" >
<checkout url="${remote.url}" destPath="${local.dir}" />
</svn>
</target>
</project>
测试结果暂时不重要。
3.JavaSVN出场
SvnAnt的执行依赖SvnClientAdapter,而执行访问SVN时又有两种形式:其一是通过SVN 命令行程序的形式进行的(我在想:如果是这样,还不如使用Ant的exec任务呢);其二是通过Javahl来执行的。
Javahl是一个用于访问Subversion的Java接口(估计是JNI),这需要Windows机上有svnjavahl.dll才行。团队的Daily Build的并不是Windows,于是求助JavaSVN,这是一个纯Java的SVN解决方案。
请访问这个Guide:[url=http://tmate.org/svn/kb/user-guide-svnant.html]Making SvnAnt use JavaSVN[/url]
我的实际步骤如下:
Step 1:从Ant的lib目录下移除SvnClientAdapter.jar,我没有发现javahl.jar,于是便移除了svnjavahl.jar,其实移不移后者无所谓;
Step 2:在刚才那个页面下载javasvn.jar和javasvn-javahl.jar,以及JavaSVN的svnClientAdapter-0.9.32.jar。并把这三个jar都拷贝到Ant的lib目录下;
然后运行上面写的SVN Ant测试脚本,结果如下:
…
BUILD FAILED
java.lang.AbstractMethodError: org.tigris.subversion.svnant.Feedback.logRevision(J)V
Total time: 7 seconds
虽然SVN的代码都取下来了,但最后Ant会抛出一个如上的错,这会使得Ant脚本无法运行后面的任务。
4.Thanks Open Source
看来,大概是JavaSVN用自己的svnClientAdapter-0.9.32.jar改变了SVNAnt本来对调用。SVNAnt(by Tigris.org)原先是调用svnjavahl.jar来运行SVN命令的。替换svnClientAdapter-0.9.32.jar后,SVNAnt(plus JavaSVN)是调用javasvn-javahl.jar和javasvn.jar来运行SVN命令的。上面那个错误大概就是两套svnClientAdapter对某个抽象方法的定义不完全一致造成的,估计是API版本对应的问题。解决如下:
首先查看svnant.jar的源代码,发现org.tigris.subversion.svnant.Feedback是实现svnClientAdapter.jar中的一个名为ISVNNotifyListener的接口。这个接口中对报错的logRevision方法的定义是:
public abstract void logRevision(long revision, String path)
而查看svnClientAdapter-0.9.32.jar中的ISVNNotifyListener的接口中的定义是:
public abstract void logRevision(long revision)
明显不匹配,于是修改svnant.jar的源代码,修改org.tigris.subversion.svnant.Feedback,象其中添加一个方法如下:
//This method is added by Beegee
public void logRevision(long revision) {
}
//This method is the original one by SVNANT
public void logRevision(long revision, String path) {
}
然后重新编译SVNAnt,生成svnant.jar,拷贝替换Ant 的lib目录下的同名jar,重新运行以上SVN Ant测试脚本,结果如下:
[img]http://blog.csdn.net/images/blog_csdn_net/beegee/20118/r_SVNAnt_task.gif[/img]
OK!
-end-
- 浏览: 143580 次
- 性别:
- 来自: 北京
最新评论
-
zcqshine:
学习了...正在想怎么用java解释邮件内容的
MIME编码介绍 -
zxz87:
douglas_lhs 写道
搞不懂啊,为什么要用GBK吗?
...
Struts2.0 中文乱码(我的解决方法) -
ember_319:
配置还算比较容易,看看官方文档就可以了。问题是使用起来,怎样来 ...
struts2.0.6 + tiles 使用配置过程 -
fr1202:
字段必须均为public,否则出错
动态调用 简单Java Bean 的get/set 方法 -
douglas_lhs:
搞不懂啊,为什么要用GBK吗?
UTF-8搞不定的吗?
Struts2.0 中文乱码(我的解决方法)
相关推荐
ant操作SVN的jar包 ant SVN联携
NULL 博文链接:https://q-wong.iteye.com/blog/665927
Ant构建J2EE应用,通常从版本控制器SVN或其他下载源码,以下为Ant SVN依赖JAR包
ant svn插件jar包:使用ant的时候从svn获取最新代码需要svn插件。具体操作可参考文字:http://www.hehongbo.com/78.html
Ant构建J2EE应用,通常从版本控制器SVN或其他下载源码,以下为Ant SVN依赖JAR包
标签: antsvn自动化测试发布 分类: ant 不会用ant打包、部署项目的工程师,不是一个好程序员(测试) 副标题:利用ant脚本 自动构建svn增量/全量 系统程序升级包 首先请允许我这样说,作为开发或测试,你一定要...
Ant构建J2EE应用,通常从版本控制器SVN或其他下载源码,以下为Ant SVN依赖JAR包
Ant构建J2EE应用,通常从版本控制器SVN或其他下载源码,以下为Ant SVN依赖JAR包
ant打包工程的配置文件,包括从svn上自动下载代码,自动打包等
这个东西对于ant svn中间的一个连接
要求与Subversion服务器同步。
SVN+ant 服务器代码打包编译流程详解,内含详细安装以及操作说明build.xml+build.properties详解,可以直接修改路径后打包编译SVN代码。
ant 脚本从svn上取代码打包代码全,同时包括相关的jar包
ant获取SVN版本信息的jar包xmltask以及安装,使用方法 包含jar包以及在ant的编译脚本XML所需加入的节点信息,供大家参考!
接下来就得为该工具配置环境变量(其实不配也行,就是以后调用麻烦点就是了^@^),比如我将其解压到E盘的根目录下,那么就得在window的环境变量中的path中配置上路径:“E:\apache-ant-1.9.2-精简版本\bin”,这样做的...
通过jenkins和ant以及svn进行整合,可以完成对系统的源代码的自动下载更新,以及代码的自动编译打包和项目的自动部署(项目的自动构建部署)。而且项目的自动构建部署和平台无关,不限定时间,可以定时操作,将开发...
NULL 博文链接:https://lucizhang.iteye.com/blog/1991373
NULL 博文链接:https://shihuan830619.iteye.com/blog/1820428
Ant+Junit+Svn实现自动单元测试
Jenkins+SVN+Ant持续集成环境配置笔记 笔记内容为个人搭建环境流程