利用svn 日志、eclipse 增量发包,非常简单!

来源:互联网 发布:中科院软件所邮编 编辑:程序博客网 时间:2024/06/01 10:07

是不是还在为网上分享东西一点诚意都没有而发愁,自己动手轻松解决增量发包难题!

1.获取SVN的changeLog

打开SVN资源历史记录,选择你要发包的记录。右击。导出日志



以下是日志的样子:

r63 | woshitianc | 2017-12-23 22:01:36 CSTChanged paths:    M /root/Testproject/ANT_DEMO/demo/src/com/csdn/common/util/StringUtil.java    M /root/Testproject/ANT_DEMO/demo/src/com/csdn/service/First.java    A /root/Testproject/ANT_DEMO/demo/src/com/csdn/service/Second.java    M /root/Testproject/ANT_DEMO/demo/src/com/csdn/service/Third.java    M /root/Testproject/ANT_DEMO/demo/webapps/demo/welcome/welcome.jsp    M /root/Testproject/ANT_DEMO/demo/webapps/demo/images/welcome.png<description>测试</description>xds927


2、根据导出的日志编写java代码拷贝你增量所需要的文件,以下代码,结合自己的需求做些修改接行了

package com.test.build;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;public class FileUtils { /**     * 拷贝文件     * @param file 想要读取svn日志的文件对象     * @param appDir 工程所在的文件夹的路径     * @param desDir 导出所在文件夹的路径     * @return 返回文件内容     */    public static String copyFiles(File file,String appDir,String desDir){        StringBuilder result = new StringBuilder();        try{            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件            String s = null;            int size=1;            while((s = br.readLine())!=null){//使用readLine方法,一次读一行            int index=s.indexOf("/trunk");            if (index<0) {continue;}                s=s.substring(index+6);                //把java文件路径替换成编译好的classes文件的路径                if (s.contains("/src/")) {s=s.replace("/src/","/WebContent/WEB-INF/classes/");s=s.replace(".java",".class");}                //过滤掉重复的源文件目录                if (result.indexOf(s)>-1) {continue;}                String desStr=desDir+s;                File srcFile = new File(appDir+s);    //源文件对象                File destFile = new File(desStr);  //目标文件对象                if (!(srcFile.exists())) {  //判断源文件是否存在                System.out.println(s+"文件不存在.......");                continue;                  }                if (!(destFile.exists())) {  //判断目标文件是否存在                desStr=desStr.substring(0,desStr.lastIndexOf("/"));                    File dir = new File(desStr);                    //创建文件夹                    if (!dir.exists()) {dir.mkdirs();}                    //创建文件                destFile.createNewFile();  //如果不存在则创建新文件                }                //使用源文件对象创建文件输入流对象                FileInputStream fis = new FileInputStream(srcFile);                //使用目标文件对象创建文件输出流对象                FileOutputStream fos = new FileOutputStream(destFile);                byte[] buf = new byte[(int)srcFile.length()];  //创建字节数组,作为临时缓冲                System.out.println("开始复制文件..."+size);                //while (fis.read(buf) != -1) {  //循环从文件输入流中读取数据                fis.read(buf);                fos.write(buf);    //写入到文件输出流中                //}                System.out.println("文件:"+s);                System.out.println("文件复制成功!");                fis.close();    //关闭流                fos.close();            result.append(s+System.lineSeparator());            size++;            }            size--;            System.out.println("文件复制总数: "+size+"个!");            br.close();            }catch(Exception e){            e.printStackTrace();        }        return result.toString();    }        public static void main(String[] args){    //工程所在的文件夹    String appDir="F:/workspace/test";    //导出所在文件夹    String desDir="C:/Users/Administrator/Desktop/test";    //svn日志存放位置        File file = new File("F:/workspace/build/src/com/test/build/changeLog.txt");        copyFiles(file,appDir,desDir);    }}


注意:执行拷贝前,记得clean一下工程,确保编译好的是最新的class文件,还有内部类的class文件注意下,免得遗漏了!


原创粉丝点击