java基于svnkit Api的开发

来源:互联网 发布:论十大关系 知乎 编辑:程序博客网 时间:2024/05/17 11:35

在java基于svnkit Api的开发过程当中,一个错误困扰了我很长时间,在调试过程中频繁的报一个错误,svn的更行操作总是不成功。

        这个错误是SVNKIT-182 Received fatal alert: bad_record_mac;

              相关原因我查询了很多的文档,初步估计是个jar包版本不兼容的问题,因为本机上Svn客户端是TortoiseSVN-1.7.7.22907-win32-svn-1.7.5.msi,下载的SVNKit版本 是org.tmatesoft.svn_1.7.9.standalone.zip,而我的本机的jdk版本为1.6导致该错误频频爆出,后来因怀疑是环境版本不兼容,多以将jdk版本更换为jdk1.7.0版本, 成功将svn服务 器上的文件更新到本地目录。

        后来考虑到要将程序搬到服务器中,而服务器的环境为jdk1.6.0_10所以又开发测试兼容的环境和版本,以下是测试通过的环境和版本号:

jdk1.6.0_10                      org.tmatesoft.svn_1.3.5.standalone      以及TortoiseSVN-v1.6.4_mydown

        要引入org.tmatesoft.svn_1.3.5.standaloneimport java.io.File;



以下是我的测试用例


import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;

import org.tmatesoft.svn.core.wc.ISVNOptions;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNUpdateClient;
import org.tmatesoft.svn.core.wc.SVNWCUtil;


public class SvnUpdateAction {
private static SVNClientManager ourClientManager;

public static void setupLibrary(){
DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
FSRepositoryFactory.setup();
}

public static void main(String[] args) {
setupLibrary();
SVNURL repositoryURL=null;
try {
repositoryURL = SVNURL.parseURIEncoded("https://xxxx/svn/xxxxxxxx/xxxx/xxxxx");
} catch (SVNException e) {
// TODO Auto-generated catch block
System.out.println("111111");
e.printStackTrace();
}
String username="xxxxxx";
String password="xxxxxx";
String myWorkingCopy="D:/zhang";
//驱动选项
ISVNOptions options=SVNWCUtil.createDefaultOptions(true);
//通过SVNClientManager的实例获取要进行操作的client实例
ourClientManager=SVNClientManager.newInstance((DefaultSVNOptions) options, username, password);
File wcDir=new File(myWorkingCopy);
SVNUpdateClient svnUpdateClient=ourClientManager.getUpdateClient();
svnUpdateClient.setIgnoreExternals(false);

//long versionNum=svnUpdateClient.doUpdate(myWorkingCopy, SVNRevision.HEAD,SVNDepth.INFINITY, false, false);
try {
svnUpdateClient.doCheckout(repositoryURL,wcDir,SVNRevision.HEAD, SVNRevision.HEAD, true);
long workingVersion= svnUpdateClient.doCheckout(repositoryURL, wcDir, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY,false);
System.out.println("把版本:"+workingVersion+" check out 到目录:"+wcDir+"中。");
// long workingVersion= svnUpdateClient.doUpdate(wcDir, SVNRevision.HEAD, false, false);
// System.out.println("把版本:"+workingVersion+" update 到目录:"+wcDir+"中。");
} catch (SVNException e) {
// TODO Auto-generated catch block
System.out.println("222");
e.printStackTrace();
}

}

}