`
lggege
  • 浏览: 372909 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java在Eclipse环境下调用Subclipse接口完成SVN操作(附源码)

    博客分类:
  • RCP
阅读更多
Java在Eclipse环境下调用Subclipse接口完成SVN操作(附源码)

在Eclipse环境中使用SVN还是比较简单的, 因为已经Subclipse已经对SVN的操作进行了封装,只需要给你的Eclipse应用添加Subclipse,然后你自己的插件项目再对Subclipse进行依赖即可。具体实现如下:

一. 给Eclipse添加Subclipse插件
Subclipse下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240

二. 新建EclipseRCP项目

三. 给Plugin项目添加依赖的Subclipse插件
a) org.tigris.subversion.clientadapter
b) org.tigris.subversion.clientadapter.javahl
c) org.tigris.subversion.clientadapter.javahl.win32
d) org.tigris.subversion.subclipse.core


四. 关键类说明
a) SVNRepositoryInfo
我自己定义的一个用于放置SVN信息的一个JavaBean
b) SVNRepositoryUtil
我自己定义的一个调用SVN的Util类
c) ISVNClientAdapter
在客户端操作SVN的具体的类
d) SVNUrl
代表SVN地址的一个类
e) ISVNNotifyListener
对SVN执行的每一步操作的监听
f) JhlClientAdapterFactory
Subclipse用于注册JHL依赖的dll的类


五. 关键代码说明
JhlClientAdapterFactory.setup();

该代码用于注册JHL所依赖的一些dll文件,所以,该方法只可以执行一次,dll注册完成后不可再执行,否则会有异常。具体JHL依赖的dll文件可以见:
eclipse\plugins\org.tigris.subversion.clientadapter.javahl.win32_1.X.X.X文件夹

String bestClientType = SVNClientAdapterFactory.getPreferredSVNClientType();
ISVNClientAdapter svnClient = SVNClientAdapterFactory.createSVNClient(bestClientType);

其实这段代码的含义是说,找到Subclipse可使用的SVNClient。
这里所谓的可用的SVNClient指的是:Subclipse提供了两种对SVN操作的liberary,一个是JHL,对应于org.tigris.subversion.clientadapter.javahl插件,一个是SVNKIT,对应于org.tigris.subversion.clientadapter.svnkit_1.6.0.1.jar插件。但事实上,SVNKit不可用,因为该插件没有对外Export任何Package。

svnClient.addNotifyListener(new SVNNotifyListener());
	
public class SVNNotifyListener implements ISVNNotifyListener {
	public void setCommand(int cmd) {
	}
	public void logMessage(String message) {
		System.out.println("Message :" + message);
	}
	public void logCommandLine(String message) {
		System.out.println("CommandLine :" + message);
	}
	// …
}


ISVNNotifyListener是需要去实现的对SVN操作的监听事件。比如,在一次commit过程中,可能提交了很多文件,删除了几个文件,更新了几个文件,那么对于这样的一个过程中的小事件提供监听的功能。

SVNRevision
这是用于表示Svn版本的类,比如HEAD,BASE,或者文件后面的数字版本,或者时间版本 等。

方法参数中的recurse
指的是,如果是一个文件夹是否需要将其下面的所有子文件夹、子文件一起遍历出来,或者一起进行操作。

SVNUrl moduleUrl = new SVNUrl(repositoryInfo.getUrl() + moduleName);
svnClient.checkout(moduleUrl, destPath, revision, true);

这段就不解释了,很容易明白。

更详细的代码请下载源代码。

源代码基于Eclipse3.4,Subclipse1.6。在Eclipse3.3中进行少量修改也能使用。
项目基于Eclipse RCP,运行iwoo.svn.product,在ToolBar点击Checkout按钮即可在Console查看到输出结果,比如下面的日志:
CommandLine :checkout http://iwoo.googlecode.com/svn/trunk/temp.withsvn -r HEAD --depth=infinity --force
Message :A   C:/A/B/C/.classpath
Status of C:\A\B\C\.classpath has changed
Message :A   C:/A/B/C/.project
Status of C:\A\B\C\.project has changed
分享到:
评论
3 楼 yuxg 2014-04-28  
2 楼 zlf420 2013-09-25  
楼主你好,请问checkin如何实现,没有直接的接口可以调用,有copy操作,但如何生成.svn文件呢? 是不是有直接的检入接口而我没发现?
1 楼 changjinlin 2011-06-09  
[color=blue]顶,正好要用到这个

相关推荐

Global site tag (gtag.js) - Google Analytics