SVN可视化平台(1) -- svnkit复制文件,复制模板

avatar 2021年12月20日10:34:54 6 2026 views
博主分享免费Java教学视频,B站账号:Java刘哥

我们最近在做 SVN 仓库 web 可视化平台,即在网页上创建项目、给用户授权等等。

该项目目前昨天已经上线了

回顾一下用到的一些技术

最近几节会着重说明一下svnkit的常见用法

svnkit是一个开源的操作svn的jar包,能帮助我们直接执行 svn 命令,无论是本地操作,还是远程操作,都是可以执行

一、svnkit的依赖

<!--  引入svnkit包 -->
<dependency>
	<groupId>org.tmatesoft.svnkit</groupId>
	<artifactId>svnkit</artifactId>
	<version>1.10.1</version>
</dependency>

 

二、复制文件命令代码

我们的业务需求是创建项目时,自动在项目仓库里创建基线库、开发库的文件夹模板,这2个文件夹里也有其他文件夹

解决方案时把这个模板直接放到项目仓库里,然后类似通过 svn copy 的操作来复制过去。

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.wc.ISVNOptions;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNCopySource;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * @author liuyanzhao
 * @date 2021/12/20 10:02
 */
@Slf4j
public class SVNUtilDemo
{

    public static ISVNOptions isvnOptions;

    // 初始化
    static
    {
        //1.根据访问协议初始化工厂
        DAVRepositoryFactory.setup();
        //2.使用默认选项
        isvnOptions = SVNWCUtil.createDefaultOptions(true);
    }


    /**
     * 复制文件夹
     * 注意:支持多层文件夹创建,支持目标文件夹已存在不报错,支持一次复制多个文件夹
     *
     * @param username
     * @param password
     * @param sourceUrlList
     * @param targetUrl
     * @param message
     * @throws SVNException
     */
    public static void doCopy(String username, String password, List<String> sourceUrlList, String targetUrl, String message) throws Exception
    {
        try
        {
            //3.初始化权限
            ISVNAuthenticationManager isvnAuthenticationManager = SVNWCUtil.createDefaultAuthenticationManager(username, password.toCharArray());
            //4.创建SVNClientManager的实例
            SVNClientManager svnClientManager = SVNClientManager.newInstance(isvnOptions, isvnAuthenticationManager);
            // 5.进行copy
            SVNCopySource[] sources = new SVNCopySource[sourceUrlList.size()];
            for (int i = 0; i < sourceUrlList.size(); i++)
            {
                sources[i] = new SVNCopySource(SVNRevision.HEAD, SVNRevision.HEAD, SVNURL.parseURIEncoded(sourceUrlList.get(i)));
            }
            svnClientManager.getCopyClient().doCopy(sources, SVNURL.parseURIEncoded(targetUrl),
                    false, true, false, message, new SVNProperties());
        } catch (Exception e)
        {
            log.error("复制文件夹失败,username:{}, password:{}, sourceUrlList:{}, targetUrl:{}, message:{}, e:{}",
                    username, password, JSON.toJSONString(sourceUrlList), targetUrl, message, e);
            throw new Exception("复制文件夹失败");
        }
    }

    /**
     * 功能说明:
     * 将项目仓库里的模板/新建项目下面的2个文件夹 复制到 新项目测试1 目录下
     * 对应命令 svn copy http://127.0.0.1/svn/项目/模板/新建项目/开发库 http://127.0.0.1/svn/项目/新项目测试1
     */
    public static void main(String[] args) throws Exception
    {
        String username = "admin"; // svn账号
        String password = "123456"; // svn密码
        List<String> sourceList = new ArrayList<>(); // 复制文件源路径
        sourceList.add("http://127.0.0.1/svn/项目/模板/新建项目/开发库");
        sourceList.add("http://127.0.0.1/svn/项目/模板/新建项目/基线库");
        String targetUrl = "http://127.0.0.1/svn/项目/新项目测试1"; // 复制文件目标路径
        String message = "创建项目复制模板"; // commit提交信息
        doCopy(username, password, sourceList, targetUrl, message);
    }

}

 

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0