目录
概述
由于大多的生产环境都采用的是增量发版,因此需要把把改变的代码打包,本文采用的是使用Java代码对
SVN上的更新记录选择后进行打包
准备
到项目的SVN管理出找到历史更新记录,选择要打包的记录然后生成变更到本地即可,需要注意存放的位置
源码增量打包
package xxx.xxx.xxx.prdPacking;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
/**
* 增量打包工具类,打包源代码</br>
* 项目右键-->Team-->显示资源历史记录-->选中要更新的日志保存到changeLog文件
*
*/
public class IncrementalPackagingSrc {
// ----------------------无需改动
// 正则表达式
private static final String HEADSTR = "^\t[M|A] $";
// 分割线
private static final String DIVIDING_LINE = "----------------------------------------------------------------------------";
// 提交的文件说明list
private static Set<String> COMMIT_CONTEXT_LIST = new HashSet<>();
// 项目文件夹路径
private static String PROJECTPATH = System.getProperty("user.dir").replace("\\", "/");
// ----------------------根据需要进行改动配置
// 补丁文件,由eclipse svn plugin生成
private static final String PATCHFILE="D:/changeLog.txt"; // 导出的日志地址
// 补丁文件包存放路径
private static final String DESPATH="D:/update_pkg"; // 存放文件的地址
// 补丁版本
private static final String VERSION="xxx/xxx/xxx"; // 更详细的地址,比如日期,版本,项目名
private static int COUNT = 0 ;
public static void main(String[] args) {
copyFiles(getPatchFileList());
}
/**
* 得到patch里面更改过的文件
* @return
* @throws Exception
*/
private static Set<String> getPatchFileList(){
FileInputStream f = null;
BufferedReader dr = null;
Set<String> fileList = new HashSet<>();
try {
f = new FileInputStream(PATCHFILE);
dr =new BufferedReader(new InputStreamReader(f,"utf-8"));
String line = "";
String commit = "" ;
while((line=dr.readLine())!=null){
// 保存提交时候说明内容
if (DIVIDING_LINE.equals(line)){
COMMIT_CONTEXT_LIST.add(commit);
}
commit = line;
// 匹配更新文件
if(line.length()>=3 && Pattern.matches(HEADSTR,line.substring(0, 3))){
line = line.substring(line.indexOf("src/main"));
fileList.add(line);
}
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("文件集合error");
}finally{
if (null != dr) {
try {
dr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(null != f){
try {
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("--------------------------待更新文件集合 start