[color=blue][b]Java在Eclipse环境下调用Subclipse接口完成SVN操作(附源码)[/b][/color]
在Eclipse环境中使用SVN还是比较简单的, 因为已经Subclipse已经对SVN的操作进行了封装,只需要给你的Eclipse应用添加Subclipse,然后你自己的插件项目再对Subclipse进行依赖即可。具体实现如下:
[color=cyan][b]一. 给Eclipse添加Subclipse插件[/b][/color]
Subclipse下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
[color=cyan][b]二. 新建EclipseRCP项目[/b][/color]
[color=cyan][b]三. 给Plugin项目添加依赖的Subclipse插件[/b][/color]
a) org.tigris.subversion.clientadapter
b) org.tigris.subversion.clientadapter.javahl
c) org.tigris.subversion.clientadapter.javahl.win32
d) org.tigris.subversion.subclipse.core
[color=cyan][b]四. 关键类说明[/b][/color]
a) [b]SVNRepositoryInfo[/b]
我自己定义的一个用于放置SVN信息的一个JavaBean
b) [b]SVNRepositoryUtil[/b]
我自己定义的一个调用SVN的Util类
c) [b]ISVNClientAdapter[/b]
在客户端操作SVN的具体的类
d) [b]SVNUrl[/b]
代表SVN地址的一个类
e) [b]ISVNNotifyListener[/b]
对SVN执行的每一步操作的监听
f) [b]JhlClientAdapterFactory[/b]
Subclipse用于注册JHL依赖的dll的类
[color=cyan][b]五. 关键代码说明[/b][/color]
该代码用于注册JHL所依赖的一些dll文件,所以,该方法只可以执行一次,dll注册完成后不可再执行,否则会有异常。具体JHL依赖的dll文件可以见:
eclipse\plugins\org.tigris.subversion.clientadapter.javahl.win32_1.X.X.X文件夹
其实这段代码的含义是说,找到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。
[b]ISVNNotifyListener[/b]是需要去实现的对SVN操作的监听事件。比如,在一次commit过程中,可能提交了很多文件,删除了几个文件,更新了几个文件,那么对于这样的一个过程中的小事件提供监听的功能。
[b]SVNRevision [/b]
这是用于表示Svn版本的类,比如HEAD,BASE,或者文件后面的数字版本,或者时间版本 等。
[b]方法参数中的recurse [/b]
指的是,如果是一个文件夹是否需要将其下面的所有子文件夹、子文件一起遍历出来,或者一起进行操作。
这段就不解释了,很容易明白。
更详细的代码请下载源代码。
源代码基于Eclipse3.4,Subclipse1.6。在Eclipse3.3中进行少量修改也能使用。
项目基于Eclipse RCP,运行iwoo.svn.product,在ToolBar点击Checkout按钮即可在Console查看到输出结果,比如下面的日志:
在Eclipse环境中使用SVN还是比较简单的, 因为已经Subclipse已经对SVN的操作进行了封装,只需要给你的Eclipse应用添加Subclipse,然后你自己的插件项目再对Subclipse进行依赖即可。具体实现如下:
[color=cyan][b]一. 给Eclipse添加Subclipse插件[/b][/color]
Subclipse下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
[color=cyan][b]二. 新建EclipseRCP项目[/b][/color]
[color=cyan][b]三. 给Plugin项目添加依赖的Subclipse插件[/b][/color]
a) org.tigris.subversion.clientadapter
b) org.tigris.subversion.clientadapter.javahl
c) org.tigris.subversion.clientadapter.javahl.win32
d) org.tigris.subversion.subclipse.core
[color=cyan][b]四. 关键类说明[/b][/color]
a) [b]SVNRepositoryInfo[/b]
我自己定义的一个用于放置SVN信息的一个JavaBean
b) [b]SVNRepositoryUtil[/b]
我自己定义的一个调用SVN的Util类
c) [b]ISVNClientAdapter[/b]
在客户端操作SVN的具体的类
d) [b]SVNUrl[/b]
代表SVN地址的一个类
e) [b]ISVNNotifyListener[/b]
对SVN执行的每一步操作的监听
f) [b]JhlClientAdapterFactory[/b]
Subclipse用于注册JHL依赖的dll的类
[color=cyan][b]五. 关键代码说明[/b][/color]
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);
}
// …
}
[b]ISVNNotifyListener[/b]是需要去实现的对SVN操作的监听事件。比如,在一次commit过程中,可能提交了很多文件,删除了几个文件,更新了几个文件,那么对于这样的一个过程中的小事件提供监听的功能。
[b]SVNRevision [/b]
这是用于表示Svn版本的类,比如HEAD,BASE,或者文件后面的数字版本,或者时间版本 等。
[b]方法参数中的recurse [/b]
指的是,如果是一个文件夹是否需要将其下面的所有子文件夹、子文件一起遍历出来,或者一起进行操作。
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