zoukankan      html  css  js  c++  java
  • eclipse实现JavaWeb应用增量打包

          很多情况下,项目是不允许全量发布的,所以你得把有做修改的文件一个个挑出来,如果有成千上百的文件,你是不是要头大了? 以下方法应该可以让你得到解救!前提是你是用装有svn plugin的eclipse上做开发。

           第一步,用svn生成项目的补丁文件。

    选中你需要增量升级的文件,点击完成。

       运行如下代码

    package verysoft.freepath;
    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.ArrayList;
    import java.util.List;
    
    public class FreePatchUtil {
    
        public static String patchFile="D:/patch.txt";//补丁文件,由eclipse svn plugin生成
        
        public static String projectPath="D:/workspace/FordClubJeeCms";//项目文件夹路径
        
        public static String webContent="WebContent";//web应用文件夹名
        
        public static String classPath="D:/workspace/FordClubJeeCms/build";//class存放路径
        
        public static String desPath="C:/Users/xuwen/Desktop/update_pkg";//补丁文件包存放路径
        
        public static String version="20140711";//补丁版本
        
        
        /**
         * @param args
         * @throws Exception 
         */
        public static void main(String[] args) throws Exception {
            copyFiles(getPatchFileList());
        }
        
        public static List<String> getPatchFileList() throws Exception{
            List<String> fileList=new ArrayList<String>();
            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<String> list){
            
            for(String fullFileName:list){
                if(fullFileName.indexOf("src/")!=-1){//对源文件目录下的文件处理
                    String fileName=fullFileName.replace("src","");
                    fullFileName=classPath+fileName;
                    if(fileName.endsWith(".java")){
                        fileName=fileName.replace(".java",".class");
                        fullFileName=fullFileName.replace(".java",".class");
                    }
                    String tempDesPath=fileName.substring(0,fileName.lastIndexOf("/"));
                    String desFilePathStr=desPath+"/"+version+"/WEB-INF/classes"+tempDesPath;
                    String desFileNameStr=desPath+"/"+version+"/WEB-INF/classes"+fileName;
                    File desFilePath=new File(desFilePathStr);
                    if(!desFilePath.exists()){
                        desFilePath.mkdirs();
                    }
                    copyFile(fullFileName, desFileNameStr);
                    System.out.println(fullFileName+"复制完成");
                }else{//对普通目录的处理
                    String desFileName=fullFileName.replaceAll(webContent,"");
                    fullFileName=projectPath+"/"+fullFileName;//将要复制的文件全路径
                    String fullDesFileNameStr=desPath+"/"+version+desFileName;
                    String desFilePathStr=fullDesFileNameStr.substring(0,fullDesFileNameStr.lastIndexOf("/"));
                    File desFilePath=new File(desFilePathStr);
                    if(!desFilePath.exists()){
                        desFilePath.mkdirs();
                    }
                    copyFile(fullFileName, fullDesFileNameStr);
                    System.out.println(fullDesFileNameStr+"复制完成");
                }
                
            }
            
        }
    
        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();
            }
        }
        
    }

    注意,以下部份请按照实际情况填写

    public static String patchFile="D:/patch.txt";//补丁文件,由eclipse svn plugin生成  
      
    public static String projectPath="D:/workspace/FordClubJeeCms";  
      
    public static String webContent="WebContent";//web应用文件夹名  
      
    public static String classPath="D:/workspace/FordClubJeeCms/build";//class存放路径  
      
    public static String desPath="C:/Users/xuwen/Desktop/update_pkg";//补丁文件包存放路径  
      
    public static String version="20140711";//补丁版本  

       好了,运行后得到结果

     如果有多个人都修改了代码,那么每个人在提交代码之前先按第一步生成补丁文件再提交。当所有人都提交代码后,在一台电脑上更新所有代码,再在这台电脑上用以上代码运行所有人生成的补丁文件即可。

  • 相关阅读:
    TcIC(Teamcenter集成CatiaV5)的安装
    centos7上使用bind解析子域名
    Windows10 家庭版(1903/1909)中用RDPWrapper-v1.6.2和autoupdate补丁开启远程桌面功能
    修改SQL Server Express 2019 sa用户密码的方法
    微星B450主板安装64G内存的一个小招数
    缩小xfs文件系统的CentOS/RedHat虚拟机硬盘的迂回方法
    MQL命令的打开方式
    台电TBook二合一本全新安装Windows10
    django_auth_ldap
    开始认真学计算机网络----computer network学习笔记(一)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5111429.html
Copyright © 2011-2022 走看看