java项目增量打包源码
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,为了便于快速的部署增量更新java项目,协助开发写了java项目增量打包工具,每次增量更新直接覆盖即可,部署人员不用管开发人员提交的文件放在项目的哪个目录,是什么文件,只要保证部署上去就可以,开发保证
千家信息网最后更新 2025年02月03日java项目增量打包源码
为了便于快速的部署增量更新java项目,协助开发写了java项目增量打包工具,每次增量
更新直接覆盖即可,部署人员不用管开发人员提交的文件放在项目的哪个目录,是什么文件,
只要保证部署上去就可以,开发保证提交的文件路径都没有错误即可。
使用方法:
先设置此class文件里项目各类文件存放路径和项目名
提交svn时候,用SVN创建补丁,
选择需要增量更新的文件,
跑一遍此class文件
增量补丁包即在你指定的目录生成了,增量补丁包名字以项目名加时间戳命名,即为补丁号或补丁版本号。
package com.thinkgem.jeesite.test;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.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import com.sun.org.apache.bcel.internal.generic.NEW;import com.thinkgem.jeesite.common.utils.FileUtils;public class FreePatchUtil { public static String patchFile="E:/patch0721.txt";//补丁文件,由eclipse svn plugin生成 public static String projectPath="D:/mypractises/workspace/Workflow/";//项目文件夹路径 public static String webContent="src/main/webapp/WEB-INF";//web应用文件夹名 public static String classPath="D:/mypractises/workspace/Workflow/";//class存放路径 public static String desPath="C:/Users/cxy/Desktop/update_pkg/";//补丁文件包存放路径 public static String projectName = "Workflow";//项目名 public static SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMddHHmmss"); /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { copyFiles(getPatchFileList()); FileUtils.zipFiles(desPath+version, "", desPath+projectName+sdFormat.format(new Date())+".zip"); } public static List getPatchFileList() throws Exception{ List fileList=new ArrayList(); FileInputStream f = new FileInputStream(patchFile); BufferedReader dr=new BufferedReader(new InputStreamReader(f,"utf-8")); String line; while((line=dr.readLine())!=null){ if(line.indexOf("Index:")!=-1){ line=line.replaceAll(" ",""); line=line.substring(line.indexOf(":")+1,line.length()); fileList.add(line); } } return fileList; } public static void copyFiles(List list){ for(String fullFileName:list){ if(fullFileName.indexOf("/java")!=-1){//对java源文件目录下的文件处理 String fileName=fullFileName; fullFileName=classPath+fileName; if(fileName.endsWith(".java")){ fileName=fileName.replace(".java",".class").replace("src/main/java/","/classes/"); fullFileName=fullFileName.replace(".java",".class").replace("/java/","/webapp/WEB-INF/classes/"); } String tempDesPath=fileName.substring(0,fileName.lastIndexOf("/")); String desFilePathStr=desPath+"/"+version+"/WEB-INF"+tempDesPath; String desFileNameStr=desPath+"/"+version+"/WEB-INF"+fileName; File desFilePath=new File(desFilePathStr); if(!desFilePath.exists()){ desFilePath.mkdirs(); } copyFile(fullFileName, desFileNameStr); System.out.println(fullFileName+"复制完成"); }else if(fullFileName.indexOf("/resource")!=-1){//对resource文件的处理 String fileName=fullFileName; fullFileName=classPath+fileName; String tempDesPath=fileName.substring(0,fileName.lastIndexOf("/")); String desFilePathStr=desPath+"/"+version+"/WEB-INF"+tempDesPath.replace("src/main/resources", "/classes/"); String desFileNameStr=desPath+"/"+version+"/WEB-INF"+fileName.replace("src/main/resources", "/classes/"); File desFilePath=new File(desFilePathStr); if(!desFilePath.exists()){ desFilePath.mkdirs(); } copyFile(fullFileName, desFileNameStr); System.out.println(fullFileName+"复制完成"); }else if(fullFileName.indexOf("/webapp/WEB-INF/views")!=-1){//对web应用文件的处理 String fileName=fullFileName; fullFileName=classPath+fileName; String tempDesPath=fileName.substring(0,fileName.lastIndexOf("/")); String desFilePathStr=desPath+"/"+version+"/WEB-INF/"+tempDesPath.replace("src/main/webapp/WEB-INF/", ""); String desFileNameStr=desPath+"/"+version+"/WEB-INF/"+fileName.replace("src/main/webapp/WEB-INF/", ""); File desFilePath=new File(desFilePathStr); if(!desFilePath.exists()){ desFilePath.mkdirs(); } copyFile(fullFileName, desFileNameStr); System.out.println(fullFileName+"复制完成"); }else{//对静态资源文件的处理 String fileName=fullFileName; fullFileName=classPath+fileName; String tempDesPath=fileName.substring(0,fileName.lastIndexOf("/")); String desFilePathStr=desPath+"/"+version+tempDesPath.replace("src/main/webapp", ""); String desFileNameStr=desPath+"/"+version+fileName.replace("src/main/webapp", ""); File desFilePath=new File(desFilePathStr); if(!desFilePath.exists()){ desFilePath.mkdirs(); } copyFile(fullFileName, desFileNameStr); System.out.println(fullFileName+"复制完成"); } } } private static void copyFile(String sourceFileNameStr, String desFileNameStr) { File srcFile=new File(sourceFileNameStr); File desFile=new File(desFileNameStr); try { copyFile(srcFile, desFile); } catch (IOException e) { e.printStackTrace(); } } public static void copyFile(File sourceFile, File targetFile) throws IOException { BufferedInputStream inBuff = null; BufferedOutputStream outBuff = null; try { // 新建文件输入流并对它进行缓冲 inBuff = new BufferedInputStream(new FileInputStream(sourceFile)); // 新建文件输出流并对它进行缓冲 outBuff = new BufferedOutputStream(new FileOutputStream(targetFile)); // 缓冲数组 byte[] b = new byte[1024 * 5]; 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(); } } }
文件
项目
补丁
增量
路径
处理
缓冲
目录
开发
更新
人员
文件夹
保证
应用
生成
输出
不用
使用方法
名字
工具
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
新洲计算机软件开发学校
美团优选改地址显示服务器异常
金蝶数据库置疑修复
美女软件开发培训学校
广西互联网科技有限公司
石狮数据库修复
透明性数据库
数据库 参照设置
实用网络技术课程心得
数据库文件分离出的文件是什么
查询数据库设计
远程网络安全龙头股
手写汉字数据库如何使用
北京沃高网络技术
深圳科技互联网博物馆
数据库常用关系运算与程序初学
一搜网络技术有限公司
连接linux服务器软件
服务器端口号啥样
重庆服务器有哪些云空间
学好编程可以开发软件开发
软件开发时期的工作
神行者日志服务器怎么安装
网络安全行政执法自查报告
php数据库修改
网络安全教育会议的主要内容
类是淘宝类软件开发
网络安全学习课程视频
华众互联网科技有限公司
上海公安局网络安全宣传片