`

Java 调用svnkit实现svn功能

 
阅读更多

·显示版本树

导入jar包

把svnkit.jar添加到项目中,用于实现svn功能。把jackson-all-1.6.2.jar添加到项目中,用于显示树列表。把javaee.ar添加到项目中。

新建一个类(SVNUtil.class)实现svn功能

privateStringsvnRoot;

privateStringuserName;

privateStringpassword;

privateSVNRepositoryrepository;

/***

*构造方法

*@paramsvnRoot

*svn根目录

*/

publicSVNUtil(String svnRoot) {

this.svnRoot=svnRoot;

}

/***

*构造方法

*@paramsvnRoot

*svn根目录

*@paramuserName

*登录用户名

*@parampassword

*登录密码

*/

publicSVNUtil(String svnRoot, String userName, String password) {

this.svnRoot=svnRoot;

this.userName=userName;

this.password=password;

}

/***

*通过不同的协议初始化版本库

*/

privatestaticvoidsetupLibrary() {

//对于使用http://和https://

DAVRepositoryFactory.setup();

//对于使用svn:/ /和svn+xxx:/ /

SVNRepositoryFactoryImpl.setup();

//对于使用file://

FSRepositoryFactory.setup();

}

每次连接库都进行登陆验证

/***

*登录验证

*@return

*/

publicbooleanlogin(){

setupLibrary();

try{

//创建库连接

repository=SVNRepositoryFactory.create(SVNURL.parseURIEncoded(this.svnRoot));

//身份验证

ISVNAuthenticationManager authManager = SVNWCUtil

.createDefaultAuthenticationManager(this.userName,

this.password);

//创建身份验证管理器

repository.setAuthenticationManager(authManager);

returntrue;

}catch(SVNException svne){

svne.printStackTrace();

returnfalse;

}

}

下面的方法实现查询给定路径下的条目列表功能

/***

*

*@parampath

*@return查询给定路径下的条目列表

*@throwsSVNException

*/

@SuppressWarnings("rawtypes")

publicList<SVN> listEntries(String path)

throwsSVNException {

Collection entries =repository.getDir(path, -1,null,

(Collection)null);

Iterator iterator = entries.iterator();

List<SVN> svns =newArrayList<SVN>();

while(iterator.hasNext()) {

SVNDirEntry entry = (SVNDirEntry) iterator.next();

SVN svn =newSVN();

svn.setCommitMessage(entry.getCommitMessage());

svn.setDate(entry.getDate());

svn.setKind(entry.getKind().toString());

svn.setName(entry.getName());

svn.setRepositoryRoot(entry.getRepositoryRoot().toString());

svn.setRevision(entry.getRevision());

svn.setSize(entry.getSize()/1024);

svn.setUrl(path.equals("") ?"/"+entry.getName() : path +"/"+entry.getName());

svn.setAuthor(entry.getAuthor());

svn.setState(svn.getKind() =="file"?null:"closed");

svns.add(svn);

}

新建一个SVNServlet

添加一个方法用于把java对象转换为json字符串

/**

*将java对象转换为json字符串

*

*@paramobj

*:可以为map,list,javaBean等

*@returnjson字符串

*@createTime2010-11-23下午07:42:58

*/

publicstaticString object2Json(Object obj) {

try{

StringWriter sw =newStringWriter();

JsonGenerator gen =newJsonFactory().createJsonGenerator(sw);

mapper.writeValue(gen, obj);

gen.close();

returnsw.toString();

}catch(Exception e) {

e.printStackTrace();

}

returnnull;

}

protectedvoiddoGet(HttpServletRequest request,

HttpServletResponse response)throwsServletException, IOException {

//TODOAuto-generated method stub

this.doPost(request, response);

}

protectedvoiddoPost(HttpServletRequest request,

HttpServletResponse response)throwsServletException, IOException {

//TODOAuto-generated method stub

Object svns =null;

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

String path = request.getParameter("pid");

String url ="svn://localhost/svndemo1";

String usrName ="usrName";

String password ="password";

if(path ==null) {

path ="";

}

path =newString(path.getBytes("ISO-8859-1"),"UTF-8");

String type = request.getParameter("type");

PrintWriter out = response.getWriter();

try{

SVNUtil svnUtil =newSVNUtil(url, usrName, password);

if(svnUtil.login()) {

/*用于查询历史记录

if("history".equals(type)) {

List<SVN> svnl = svnUtil.getHistory(path);

HashMap<String, Object> sv =newHashMap<String, Object>();

sv.put("total", svnl.size());

sv.put("rows", svnl);

svns = sv;

}else{*/

svns = svnUtil.listEntries(path);

//}

//把java对象转换成json字符串

String json = SVNServlet.object2Json(svns);

out.print(json);

}else{

System.out.println("验证失败");

}

}catch(SVNException ex) {

ex.printStackTrace();

}

out.flush();

out.close();

}

新建一个index.jsp用户显示版本数列表,页面显示我使用了jquery-easyui模板

<%@pagelanguage="java"contentType="text/html; charset=utf-8"

pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() +"://"

+ request.getServerName() +":"+ request.getServerPort()

+ path +"/";

%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<basehref="<%=basePath%>">

<title>SVN</title>

<metahttp-equiv="Content-Type"content="text/html; charset=utf-8">

<metahttp-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control"content="no-cache">

<metahttp-equiv="expires"content="0">

<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

<metahttp-equiv="description"content="This is my page">

<linkrel="stylesheet"type="text/css"

href="plugs/themes/default/easyui.css">

<linkrel="stylesheet"type="text/css"href="plugs/themes/icon.css">

<scripttype="text/javascript"src="plugs/jquery-1.4.2.min.js"></script>

<scripttype="text/javascript"src="plugs/jquery.easyui.min.js"></script>

<scripttype="text/javascript">

$(function() {

$('#test').treegrid({

title :'SVN列表',

nowrap :false,

rownumbers :true,

collapsible :false,

url :'svn?pid=',

idField :'url',

treeField :'url',

frozenColumns : [ [ {

title :'路径',

field :'url',

width : 350,

formatter :function(value) {

return'<span style="color:red">'+ decodeURI(value.substr(value.lastIndexOf("/"))) +'</span>';

}

} ] ],

columns : [ [ {

field :'name',

title :'名称',

width : 120

}, {

field :'size',

title :'文件大小(KB)',

width : 80,

rowspan : 2

}, {

field :'revision',

title :'版本号',

width : 80,

rowspan : 2

}, {

field :'author',

title :'作者',

width : 100,

rowspan : 2

}, {

field :'date',

title :'修改日期',

width : 130,

rowspan : 2

}, {

field :'commitMessage',

title :'注释',

width : 150,

rowspan : 2

}, {

field :'kind',

title :'操作',

width : 120,

align :'center',

rowspan : 2,

formatter :function(value) {

returnvalue=='file'?'<a onclick="download()" style="cursor: pointer;color:red">下载</a><a onclick="viewHistory()" style="margin-left:5px; cursor: pointer;color:red">历史版本</a>':'';

}

}] ],

onBeforeExpand :function(row, param) {

$(this).treegrid('options').url ='svn?pid='+encodeURI(decodeURI(row.url));

}

});

});

functiondownload(){

setTimeout(function(){

varnode = $('#test').treegrid('getSelected');

if(node !=null)

window.open("download?url="+encodeURI(decodeURI(node.url))+"&size="+node.size+"&name="+encodeURI(decodeURI(node.name))+"&revision="+node.revision);

},200);

}

functionviewHistory(){

setTimeout(function(){

varnode = $('#test').treegrid('getSelected');

if(node !=null) {

window.open("history.jsp?uri="+encodeURI(decodeURI(node.url)),"_blank","height=400,width=700,status=yes,toolbar=no,menubar=no,location=no");

}

}, 200);

}

</script>

</head>

<body>

<tableid="test"></table>

</body>

</html>

显示效果如下

版本树列表

历史版本

转载自:http://blog.csdn.net/czw1029612/article/details/6086689

分享到:
评论

相关推荐

    纯java操作svn--svnkit API

    为了更好地集成SVN功能到Java应用中,SVNKit提供了一套全面且强大的API。本文将详细解析SVNKit API中的几个关键方法,并通过一个具体的示例来展示如何使用这些方法实现常见的SVN操作。 #### SVNKit API简介 SVNKit...

    java调用SVNKit示例

    Java调用SVNKit是为了在Java程序中集成Subversion(SVN)版本控制系统的能力。SVNKit是一个纯Java实现的Subversion库,允许开发者在Java应用中执行各种SVN操作,如检出、提交、更新、回滚等。以下是对标题和描述中所...

    SVNKit获取SVN信息

    这个库使得开发者能够在Java应用程序中实现与SVN服务器的交互,包括版本控制操作、仓库浏览、信息获取等功能。本篇文章将深入探讨如何利用SVNKit来获取SVN的相关信息。 首先,你需要在项目中引入SVNKit的依赖。通常...

    svnkit插件开发包 支持Java开发svn一键打包

    SVNKit是一款纯Java实现的Subversion(SVN)客户端库,它允许开发者在Java应用程序中直接集成SVN功能,无需依赖任何本地SVN客户端。这个压缩包提供的"svnkit-1.10.6"是SVNKit的一个版本,包含了支持Java开发的SVN...

    java 调用svn获取历史方法

    需要svnkit 使用方法 SVNUtil.getHistoryByDate("https://127.0.0.1:8443/svn/Test/mytestprotect/", "username", "password"); 如果jar 在我的其它资源里

    java实现svn更新和提交.rar

    总之,Java 实现 SVN 更新和提交利用 SVNKit 和 SVNKit-CLI 可以方便地在程序中集成 SVN 功能,为团队协作提供自动化支持,提高代码管理的效率。通过以上步骤,你可以根据项目需求编写相应的 Java 类和方法,实现对 ...

    java操作svn把资源下载到服务器

    首先,要实现这个功能,我们需要一个支持SVN操作的Java库。Apache的Subversion客户端抽象层(SVNKit)是一个广泛使用的库,它提供了与SVN服务器通信的API。要开始,你需要将SVNKit的JAR文件添加到你的项目类路径中。...

    JAVA编写SVN统计代码数量系统

    这通常涉及到SVN的API或者库,如`svnkit`或`javasvn`,通过这些工具可以获取仓库的历史信息,包括作者、时间戳和修改的文件列表。 5. **代码分析**:统计代码数量通常涉及解析源代码文件,区分注释、空格和实际代码...

    JAVA代码实现远程操作服务器文件

    JAVA代码实现远程操作服务器文件是指使用JAVA语言实现远程操作服务器文件的功能,实现FTP,共享文件夹操作。该功能可以实现远程服务器文件的上传、下载、复制、移动、删除等操作。 description: 该实现使用了...

    SVN变更发送邮件通知Java实现

    "SVN变更发送邮件通知Java实现"是一个这样的功能,它能够在 SVN 仓库发生变动时自动发送邮件通知给相关人员。 首先,我们需要理解如何通过Java来实现这一功能。Java 提供了丰富的类库来处理邮件发送,比如JavaMail ...

    svnkit-1.7.11

    然后,通过简单的Java代码即可调用SVNKit的API进行操作,例如初始化`SVNClientManager`并执行提交操作。 7. **冲突处理**:SVNKit提供了处理版本冲突的能力,当多个用户修改同一文件的不同部分时,SVNKit可以帮助...

    SVNKit开发的Demo

    SVNKit不仅适用于开发SVN客户端工具,还可以用于构建持续集成系统、版本控制插件或任何需要集成SVN功能的Java应用。 通过这个Demo,开发者可以学习到如何在Java项目中有效地使用SVNKit库,提升版本控制的自动化...

    java svn操作

    使用Java SVN操作,我们主要通过调用SVNKit库提供的API来实现这些功能。例如: 1. **导入**:可以使用`SVNClientManager`的`import`方法,指定本地文件或目录及远程URL,完成导入操作。 2. **检出**:通过`checkout...

    timerTask定时任务使用java代码操作svn

    SVNKit是一个纯Java实现的SVN客户端库,提供了丰富的API,可以实现对SVN的各种操作,如添加、删除、提交、更新等。 - 首先,需要在项目中引入SVNKit依赖,然后创建SVNClientManager实例,这是所有SVN操作的基础。 ...

    svnkit帮助文档API+SVNKit实例+jar包

    SVNKit是一个强大的Java库,它实现了Subversion(SVN)客户端功能,允许开发者在Java应用程序中集成版本控制系统。SVNKit提供了丰富的API,使得开发者能够执行常见的SVN操作,如检出、提交、更新、合并等。这个...

    svnkit1.8.15

    它提供了全面的功能,允许开发者在Java应用程序中实现对SVN的访问,包括但不限于查看、比较、提交、更新和回滚代码仓库操作。在给定的"svnkit1.8.15"中,我们聚焦于版本1.8.15,这可能是SVNKit的一个稳定版本,包含...

    SVNkit的Jar包 和实例代码

    这些JAR包通常包含了SVNkit的所有必需组件,包括核心库、依赖库以及可能的本地化资源,使得开发者能够在项目中直接引用并调用SVN相关的功能。 描述中提到的“实例代码”意味着该压缩包中可能包含了一些示例代码,...

    SVNKit实例 + jar包 + SVNKit API

    SVNKit是一个强大的Java库,它实现了Subversion(SVN)客户端的功能,允许开发者在Java应用程序中集成版本控制系统。SVNKit提供了丰富的API,使得开发者能够执行诸如版本控制、提交、更新、比较、合并等SVN操作。在...

    svnkit的demo

    SVNKit是一个强大的Java库,它实现了Subversion(SVN)客户端功能,允许开发者在Java应用程序中集成版本控制系统。SVNKit提供了丰富的API,用于执行常见的SVN操作,如检查、更新、提交、合并和分支等。这个"svnkit的...

    调用SVN接口所使用的jar包及源码

    首先,`svnkit`是一个纯Java实现的SVN客户端库,它提供了一系列的类和方法,使开发者能够在Java应用程序中执行常见的SVN操作,如添加、提交、更新、合并、回滚等。这些操作都是通过调用SVN接口实现的,这些接口定义...

Global site tag (gtag.js) - Google Analytics