分享
 
 
 

Using SVN With Ant

王朝java/jsp·作者佚名  2006-03-10
窄屏简体版  字體: |||超大  

Using SVN with Ant

摘要:

Subversion是越来越被广泛使用的版本管理工具,使用Ant脚本从Subversion获取代码,实现Daily Build。

1.Subversion概述

先引用Version Control with Subversion 中开头的话:

“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的特性和优势为证,懒得写了,直接看这里:Subversion的老家

关于如何使用Subversion以及相关客户端软件,网上慢慢看吧,官方自由图书不错。

2.蚂蚁出场

团队最近的项目中即使用Subversion作为版本控制工具。Daily Build过两天就得搭建起来了,上蚂蚁!

Tigris.org提供了Subclipse,SvnClientAdapter和SvnAnt。(见这里)

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使用说明文档,也可以在这里直接查看。

使用其中的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:Making SvnAnt use JavaSVN

我的实际步骤如下:

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测试脚本,结果如下:

OK!

-end-

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有