近日在做项目的时候 遇到了个问题,因为本地环境与生产环境 不一致,所以修改之后的代码不能整体打包 放到生产环境,而是只能以增量包的形式升级,手动打包 费时费力 而且容易出错,于是参照网上一些博客开发了一个增量包打包工具,好闲言少叙,上代码。

1. 首先根据上图方式 获取svn历史提交记录,然后单击其中一条,右键--》Generate changeLog--》svn log with affected paths--》ok 生成changeLog文件。

2. 根据自身的项目路径初始化以下路径:

        //svn生成的历史修改文件记录static String CHANGE_LOG_FILE_NAME = "d:/changeLog.txt";//changeLog文件中 多余的路径前缀static String CHANGE_LOG_PREFIX = "d:/main/";//classes 文件夹本地路径static String CLASS_SOURCE_PREFIX = "d:/main/WebRoot/WEB-INF/classes/";//webroot 文件夹本地路径static String JSP_SOURCE_PREFIX = "d:/main/WebRoot/";//生成 增量包目标文件夹static String TARGET_PREFIX = "d:/main/release/webapps/";//增量包生成 主名称--后面会加上生成时间 年月日时分秒static String PACKAGE_NAME = "main";//项目WebRoot 文件夹static String WEBROOT = "WebRoot";//项目Classes 文件夹static String WEB_INF = "WEB-INF/classes/";//项目 src 文件夹static String SRC = "src";//项目配置文件 文件夹 static String ROURCE = "resources";static {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date();String dateStr = sdf.format(date);PACKAGE_NAME = PACKAGE_NAME + "_" + dateStr;File file = new File(TARGET_PREFIX + PACKAGE_NAME);if (file.exists()) {try {del(TARGET_PREFIX + PACKAGE_NAME);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {file.mkdirs();}}

3. 编写删除文件工具方法,用于删除已有重复文件:

/*** * @param filepath* @throws IOException*/public static void del(String filepath) throws IOException {File f = new File(filepath);// 定义文件路径if (f.exists() && f.isDirectory()) {// 判断是文件还是目录if (f.listFiles().length == 0) {// 若目录下没有文件则直接删除f.delete();} else {// 若有则把文件放进数组,并判断是否有下级目录File delFile[] = f.listFiles();int i = f.listFiles().length;for (int j = 0; j < i; j++) {if (delFile[j].isDirectory()) {del(delFile[j].getAbsolutePath());// 递归调用del方法并取得子目录路径}delFile[j].delete();// 删除文件}}}}

4. 编写文件复制工具方法,用于将本地编译目录文件复制到打包目录:

/*** 复制文件* @param sourceFile* @param targetFile* @throws Exception*/public static void copyFile(File sourceFile, File targetFile) throws Exception {BufferedInputStream inBuff = null;BufferedOutputStream outBuff = null;if (sourceFile.isFile()) {try {// 新建文件输入流并对它进行缓冲inBuff = new BufferedInputStream(new FileInputStream(sourceFile));if(!targetFile.exists()){try{targetFile.getParentFile().mkdirs();targetFile.createNewFile();}catch(Exception e){System.out.println(targetFile.getAbsolutePath());throw e;}}// 新建文件输出流并对它进行缓冲outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));// 缓冲数组byte[] b = new byte[256];int len;while ((len = inBuff.read(b)) != -1) {outBuff.write(b, 0, len);}// 刷新此缓冲的输出流outBuff.flush();} finally {// 关闭流if (inBuff != null)inBuff.close();if (outBuff != null)outBuff.close();}}}

4. 有了以上工具,才可以更好的实现 文件打包,下面 是应用上面方法,读取log文件 并打包的方法:

public static void main(String[] args) throws Exception {File file = new File(CHANGE_LOG_FILE_NAME);BufferedReader br = new BufferedReader(new FileReader(file));String line = null;System.err.println(PACKAGE_NAME);try {while ((line = br.readLine())!= null) {if (line.contains(CHANGE_LOG_PREFIX)) {String[] relativePaths = line.split(CHANGE_LOG_PREFIX);String relativePath = relativePaths[1];if (relativePath.startsWith(SRC+"/")) {if (relativePath.contains(".java")) {relativePath = relativePath.replaceAll(".java", ".class");}relativePath = relativePath.replaceAll(SRC+"/", "");String sourcePath = CLASS_SOURCE_PREFIX + relativePath;String targetPath = TARGET_PREFIX + PACKAGE_NAME + "/" + WEB_INF + relativePath;copyFile(new File(sourcePath), new File(targetPath));} else if (relativePath.startsWith(WEBROOT+"/")) {relativePath = relativePath.replaceAll(WEBROOT+"/", "");String sourcePath = JSP_SOURCE_PREFIX + relativePath;String targetPath = TARGET_PREFIX + PACKAGE_NAME + "/" + relativePath;copyFile(new File(sourcePath), new File(targetPath));} else if (relativePath.startsWith(ROURCE+"/")) {relativePath = relativePath.replaceAll(ROURCE+"/", "");String sourcePath = CLASS_SOURCE_PREFIX + relativePath;String targetPath = TARGET_PREFIX + PACKAGE_NAME + "/" + WEB_INF + relativePath;copyFile(new File(sourcePath), new File(targetPath));}System.err.println(relativePath);}//              if(line) {
//
//              }}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {br.close();}}

此方法是仁者见仁智者见智的方法,靠个人根据自身项目目录自由发挥,开发出适用于自己的打包工具,当然与此都是大同小异的。

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

以上文章是引用此文章修改所得,点击可查看

java 根据 SVN changeLog 文件 生成增量升级包相关推荐

  1. Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类

    Java使用ftl模板文件生成Word 一.写在前面 最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊. https://blog.cs ...

  2. java maven 读取 dbf 文件 生成 表结构 示例代码

    介绍 通过读取一个文件夹下所有dbf文件 然后生成sql 依赖 <dependency><groupId>com.github.albfernandez</groupId ...

  3. pb文件生成java类,根据proto文件生成pb和pb_service文件

    假如有一个HelloWorld.proto文件,内容如下: syntax = "proto3"; option java_package = "ex.grpc" ...

  4. Chimm.Excel —— 使用Java 操作 excel 模板文件生成 excel 文档

    内容已不在此处更新,请移步https://blog.csdn.net/chimmhuang/article/details/111251115 1. 项目介绍 Chimm.Excel 是什么? 该程序 ...

  5. Java 通过csv表格文件生成转换SQL文件

    public static void main(String[] args) throws IOException {ArrayList<String[]> csvList = new A ...

  6. svn增量打包部署_利用svn的补丁文件打包生成增量文件

    下面的代码是maven版本 1. 创建patch.txt增量文件 保存到 文件目录下 比如 E:\aa\patch.txt 2. 编写java代码 package utils; import java ...

  7. 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | \r\n换行 | Runtime 执行 Cmd 命令 )

    文章目录 Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 1.生成 bat 脚本注意事项 2.Java 执行 Cmd 命令 3.完整代码示例 4.执行结果 Java 文件生成 ...

  8. md文件生成Java代码_Beetlsql自定义生成entity,mapper,md代码

    packagecom.github.tungss.auth;import org.beetl.sql.core.*;import org.beetl.sql.core.db.*;import org. ...

  9. java代码查询索引文件实例_关于使用pdfbox的对PDF文件通过lucene生成索引文件IndexPDFFiles类代码示例...

    一.前言 下面通过pdfbox的pdfbox-2.0.9源码中org.apache.pdfbox.examples.lucene.IndexPDFFiles索引PDF文件生成类,基于apache的lu ...

最新文章

  1. java 判断时间合法_java 中 Date 类型快判断日期是否合法.
  2. tcpdump for Android 移动端抓包
  3. mysql-5.7.10产生的日志时间与系统时间不一致
  4. 如何优化Hibernate EllementCollection语句
  5. 2.Building Models from Convolutions
  6. Gem5全系统FS(full system)测试
  7. 互联网从此没有 BAT
  8. vb wps 链接单元格_wps如何超链接wps表格.doc
  9. ROSBridge - ROS系统与非ROS外部系统的通信的C++客户端实现
  10. 学计算机独显重要吗,“集显”、“独显”对于普通电脑用户来说还那么重要吗?...
  11. 2.2磁盘IO网络IO工作机制
  12. 苹果iCloud服务疑遭中国黑客攻击
  13. QCustomPlot系列 进行框选放大(二)
  14. 关于人工智能的定义,这篇文章定义比较全面了
  15. 启动计算机时进入bios界面,电脑开机就进入bios界面怎么办
  16. 万能数据库查询分析器使用技巧之(十)
  17. 模块一 day05 数据类型(上)
  18. 初探docker部署gitlab
  19. <马哲>以私有制为基础的商品经济的基本矛盾是什么?2017-12-27
  20. 【二维码】二维码生成

热门文章

  1. 粉红色梦幻唯美的家庭相册模板
  2. python中的pip命令在cmd下用不了?
  3. for循环语句执行顺序
  4. JAVA缓存技术特点
  5. outlook邮件路径更改_如何在Outlook中更改电子邮件的“答复”地址
  6. 雷卯电子PUSB3FR4完美兼容安世半导体
  7. 计算机专业 英语复试专业问题准备(1)
  8. axios(尚硅谷)
  9. 《面朝大海,春暖花开》——海子
  10. saltstack配置管理和数据系统