博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java项目增量打包源码
阅读量:6388 次
发布时间:2019-06-23

本文共 6858 字,大约阅读时间需要 22 分钟。

为了便于快速的部署增量更新java项目,协助开发写了java项目增量打包工具,每次增量

更新直接覆盖即可,部署人员不用管开发人员提交的文件放在项目的哪个目录,是什么文件,

只要保证部署上去就可以,开发保证提交的文件路径都没有错误即可。
使用方法:
先设置此class文件里项目各类文件存放路径和项目名
提交svn时候,用SVN创建补丁,
选择需要增量更新的文件,
跑一遍此class文件
增量补丁包即在你指定的目录生成了,增量补丁包名字以项目名加时间戳命名,即为补丁号或补丁版本号。

java项目增量打包源码

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(); } } }

转载于:https://blog.51cto.com/czwanga/2046320

你可能感兴趣的文章
关于discuz中禾金投票系统循环出现引导页的问题
查看>>
C#开源系统大汇总
查看>>
Linux服务器安全初始化自选安装Shell脚本
查看>>
PyCharm教程
查看>>
Python 简单的数据结构(一)
查看>>
谁说我们只会做工作流?做实验室管理系统我们也内行。
查看>>
yum安装开发库
查看>>
我的友情链接
查看>>
开源Python网络爬虫资料目录
查看>>
NSRunLoop Internals
查看>>
Hadoop2.4.1分布式安装
查看>>
PHP利用socket来实现POST数据
查看>>
Connection is read-only问题的产生原因与解决方法
查看>>
Proxmox VE 部署维护
查看>>
Linux软件包安装与卸载
查看>>
centos5.x安装sphinx
查看>>
3分钟搭建Ant Design Pro前端开发环境( MyClouds的前端选型)
查看>>
Scala各种用法
查看>>
Linux系统常用命令(二)
查看>>
简单的工厂模式学习
查看>>