是不是还在为网上分享东西一点诚意都没有而发愁,自己动手轻松解决增量发包难题!
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文件注意下,免得遗漏了!