java批量从svn导出多个项目

  近期工作中要对很多项目加相同的依赖,需要将很多项目都从svn导出,感觉一个个导太慢了,由于不会写脚本就从晚上找到svn拉代码的程序,稍作修改很快就拉完了所有代码。直接上必要代码

必要pom

    <dependency>
      <groupId>org.tmatesoft.svnkit</groupId>
      <artifactId>svnkit</artifactId>
      <version>1.10.1</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
    </dependency>

  必要代码

@Slf4j
public class SvnService {
    private SVNClientManager clientManager;

    public void checkOut(final SvnConfig config) {
        final String user = config.getSourceSvnUser();
        final String password = config.getSourceSvnPassword();
        final String sourceSvn = config.getSourceSvn() + config.getSourceProject();
        try {
            //初始化支持svn://协议的库。 必须先执行此操作。
            SVNRepositoryFactoryImpl.setup();

            //相关变量赋值
            SVNURL repositoryURL = SVNURL.parseURIEncoded(sourceSvn);
            ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
            //实例化客户端管理类
            this.clientManager = SVNClientManager.newInstance(
                    (DefaultSVNOptions) options, user, password);
            //要把版本库的内容check out到的目录
            File wcDir = new File(config.getSourceCheckOutDir());
            //通过客户端管理类获得updateClient类的实例。
            SVNUpdateClient updateClient = this.clientManager.getUpdateClient();
            // sets externals not to be ignored during the checkout
            updateClient.setIgnoreExternals(false);
            //执行check out操作,返回工作副本的版本号。
            long workingVersion = updateClient.doCheckout(
                    repositoryURL, wcDir,
                    SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY,
                    false);

            log.info("VERSION:{} check out to {}", workingVersion, wcDir);
        } catch (Exception e) {
            log.error("SvnService.doCheckOut error: ", e);
        }
    }

    public void update(final SvnConfig config) {
        final String user = config.getSourceSvnUser();
        final String password = config.getSourceSvnPassword();
        final String sourceSvn = config.getSourceSvn() + config.getSourceProject();
        try {
            //初始化支持svn://协议的库。 必须先执行此操作。
            SVNRepositoryFactoryImpl.setup();
            //相关变量赋值
            SVNURL.parseURIEncoded(sourceSvn);
            ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
            //实例化客户端管理类
            this.clientManager = SVNClientManager.newInstance(
                    (DefaultSVNOptions) options, user, password);

            //要更新的文件
            File updateFile = new File(config.getSourceCheckOutDir());
            //获得updateClient的实例
            SVNUpdateClient updateClient = this.clientManager.getUpdateClient();
            updateClient.setIgnoreExternals(false);
            //执行更新操作
            long versionNum = updateClient.doUpdate(updateFile, SVNRevision.HEAD, SVNDepth.INFINITY, false, false);
            log.info("updated version is {}", versionNum);
        } catch (Exception e) {
            log.info(e.getMessage() + "{}", e);
        }
    }

    public void commit(final SvnConfig config) {
        final String user = config.getSourceSvnUser();
        final String password = config.getSourceSvnPassword();
        final String sourceSvn = config.getSourceSvn() + config.getSourceProject();
        try {
            //初始化支持svn://协议的库。 必须先执行此操作。
            SVNRepositoryFactoryImpl.setup();
            //相关变量赋值
            SVNURL.parseURIEncoded(sourceSvn);
            ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
            //实例化客户端管理类
            this.clientManager = SVNClientManager.newInstance(
                    (DefaultSVNOptions) options, user, password);
            //要提交的文件
            File commitFile = new File(config.getSourceCheckOutDir());

            //获取此文件的状态(是文件做了修改还是新添加的文件?)

            SVNStatus status = this.clientManager.getStatusClient().doStatus(commitFile, true);

            //如果此文件是新增加的则先把此文件添加到版本库,然后提交。
            if (status.getContentsStatus() == SVNStatusType.STATUS_UNVERSIONED) {

                //把此文件增加到版本库中
                this.clientManager.getWCClient().doAdd(commitFile, false, false, false, SVNDepth.INFINITY, false, false);
                //提交此文件
                this.clientManager.getCommitClient().doCommit(
                        new File[]{commitFile}, true, "", null, null, true, false, SVNDepth.INFINITY);
                System.out.println("add");
            }

            //如果此文件不是新增加的,直接提交。
            else {
                this.clientManager.getCommitClient().doCommit(
                        new File[]{commitFile}, true, "", null, null, true, false, SVNDepth.INFINITY);
                System.out.println("commit");

            }

            System.out.println(status.getContentsStatus());
        } catch (Exception e) {
            log.error(e.getMessage() + "{}", e);
        }
    }
}

  其余代码

参考:https://blog.csdn.net/qq_38292691/article/details/97521810

原文地址:https://www.cnblogs.com/javashare/p/12383435.html

时间: 2024-10-30 23:53:03

java批量从svn导出多个项目的相关文章

Java 批量文件压缩导出,并下载到本地

主要用的是org.apache.tools.zip.ZipOutputStream  这个zip流,这里以Execl为例子. 思路首先把zip流写入到http响应输出流中,再把excel的流写入zip流中(这里可以不用生成文件再打包,只需把execl模板读出写好数据输出到zip流中,并为每次的流设置文件名) 例如:在项目webapp下execl文件中 存在1.xls,2.xls,3.xls文件 1.Controller @RequestMapping(value = "/exportAll&qu

svn导出项目到myeclipse,运行报ClassNotFoundException

一开始以为是 这样的svn导出项目到myeclipse,运行报ClassNotFoundException 后来不行 又看了一下  还不行 以为是这样的MyEclipse2014报错java.lang.ClassNotFoundException 后来也不是 发现多了几个没用的jar包  删除之后就好了 迷之尴尬

从svn导出android项目,却不能被ecllipse识别

今天从svn上导出一个android项目,到eclipse中.导出之后目录结构显示不正常,没有Android Private Libraries,也没有Android版本,比如 Android 5.0.1,然后右键->属性,里面没有Android选项. 最后发现这个里面没有.project文件,.project是项目文件,项目的结构都定义在里面,比如libs的位置,src的位置.这时从别的android项目中copy一份过来就好了,这里贴出一份.project文件的内容: <?xml vers

ZendStudio 解决svn导出项目乱码问题

从svn导出项目往往会出现乱码,可以右击项目,点击properties(或者选中项目alt+enter键进入)直接修改项目编码为utf-8,但是html文件还是乱码. 下面的方法可以解决: windows->preference->General->workplace,将右边的“text file encoding”修改为utf8格式 windows->preference->General->Editors->Text Editors->Spelling右

java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用! 简单先写一下目录的建立的主要代码,测试用的 List ls = new ArrayList();//报表名称列表  ls.add("BB_BB03");  ls.add("BB_BB05");  ls.add("BB_BB06"); try { 

java crm 进销存 springmvc SSM 项目 源码 系统

系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM 普通java web(非maven, 附赠pom.xml文件)  数据库:mysql 3.开发工具:myeclipse  eclipse idea 均可, 没有限制. 我这边myeclipse 2014 导出来的项目源码 ---------------------------------------

Eclipse下安装SVN插件以及连接SVN服务并发布项目

Eclipse安装SVN插件 Help->Eclipse MarketPlace 查找并安装Subclipse插件 按默认步骤完成SVNEclipse插件的安装(安装完成后需要重启Eclipse后生效). 将项目从Eclipse发布到SVN服务器 新建一个Java项目: 在项目上右键,找到Team->ShareProject 选择SVN 创建一个新的资源库位置: 设置SVN地址,格式: svn://ip地址 设置SVN资源库的文件夹名称: 添加注释后选择完成: 填写SVN服务的用户名和密码 点

Unity3D导出到安卓项目无法监听摇杆的轴键

Unity3D 5.0的项目导出到安卓项目,在UnityPlayerActivity.java里面的onKeyDown和一些按键按下的事件无法监听到摇杆的轴键按下,就是x, y, z, rz轴的数据(实际摇杆),修改AndroidManifest.xml文件中的meta-data可以解决, <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true"

Java 用Freemarker完美导出word文档(带图片)

Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. 准备材料 1.word原件 2.编辑器(推荐Firstobject free XML editor) 实现步骤 1.用Microsoft Office Word打开word原件: 2.把需要动态修改的内容替换成***,如果有图片,尽量选择较小的图片几十K左右,并调整好位置: 3.另存为,选择保存类型