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

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

1.获取SVN的changeLog

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



以下是日志的样子:

r63 | woshitianc | 2017-12-23 22:01:36 CST
Changed 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文件注意下,免得遗漏了!


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值