[关闭]
@kevinZheng 2014-12-19T07:50:21.000000Z 字数 2547 阅读 3134

jeePatchExp补丁导出1.0

eclipse svn class文件 工具 补丁


背景介绍

java web工程开发维护过程中经常遇到的场景就是修改个别后台类或者前台页面,然后打补丁上线,eclipse工具都是关注整体打包跟部署方便的,对补丁导出没有相关好用的方法(或者是我没找到)。所以就做了这个简单的小工具用来导出java编译的class文件和html这些资源文件,目前的版本是针对java web工程的如果是别的类型的项目也可以参考改造后使用。

实现方式

最初考虑使用脚本实现,但是脚本不能跨平台而且我只会最简单的脚本处理复杂的字符串不擅长。索性就用擅长的java写这个工具了。整体想法就是做一个可执行的jar 供eclipse 外部工具[1]调用 。

Created with Raphaël 2.1.2Start选择资源点击外部工具导出参数是否合法?Endyesno

关键代码

/**
 * 导出资源
 * 目前只考虑代码,配置或其他资源文件暂不考虑
 * 且只能每次导出一个文件,
 * 判断资源路径中是否包含constants_WEBCONTENT ,包含则直接复制
 * 判断资源文件以.java结尾,拷贝class文件到对应目录
 */
public void expResource(){
    String src=resource_loc;//原文件
    String desc="";//导出文件
    String rName=resource_name;

    if(resource_loc!=null&&resource_loc.contains(constants_WEBCONTENT)){
        String desc_temp=resource_loc.substring(resource_loc.indexOf(constants_WEBCONTENT));
        desc=desc_temp.replace(constants_WEBCONTENT, expFolder+File.separatorChar+project_name);
        makFIleDirs(desc.replace(rName, "")); 
        copyResource(src,desc);
    }
    if(resource_name!=null&&resource_name.endsWith(constants_JAVAFILE)){
        String[] src_strs=resource_loc.split(project_name);
        String separator = getSeparator();
        String ydmMl=src_strs[1].split(separator)[1];
        String src_temp=constants_CLASSES+src_strs[1].replaceFirst(separator+ydmMl+separator, "").replace(constants_JAVAFILE, constants_CLASSFILE);
        src=project_loc+File.separatorChar+constants_WEBCONTENT+src_temp;
        desc=expFolder+File.separatorChar+project_name+src_temp;
        rName=resource_name.replace(constants_JAVAFILE, constants_CLASSFILE);
        makFIleDirs(desc.replace(rName, "")); 
        expInnerClass(src, desc, rName);
        copyResource(src,desc);
    }

}
/**
 * 导出内部类
 * @param src
 * @param desc
 * @param rName
 */
public void expInnerClass(String src,String desc,String rName){
    File classFileFolder=new File(desc.replace(rName, ""));
    if(classFileFolder.exists()){
        for(String filename:classFileFolder.list()){
            if(filename!=null&&filename.startsWith(rName.replace(constants_CLASSFILE, "$"))&&filename.endsWith(constants_CLASSFILE)){
                copyResource(src.replace(rName, filename),desc.replace(rName, filename));
            }
        }
    }
}

当然最初的想法每次只能导出一个类文件确实有点坑爹,所以又扩展了一种用法,利用svn插件create patch功能[2]导出patch20141216.txt 文件放到工程下面然后选择这个补丁说明文件导出多个资源文件。


遇到的问题

字符串分割替换

替换资源路径字符串时候遇到的问题就是windows 下的路径比如c:\\somethingA\\somethingB\\somethingC 替换的时候不能根据File.separatorChar 直接分割替换,需要用四个反斜杠“\\\\”这一点需要注意。

可执行jar

window下eclipse外部工具指定jar文件直接作为可执行文件会报错,当时想到的方案是手动写个批处理,将eclipse传递出来的参数再传递给main函数即java -jar jeePatchExp.jar %1 %2 %3 %4 %5 这样。后来经过实验发现在windows下修改jar文件的默认打开方式改成java.exe就好了


详细内容及下载

具体配置使用方法及详细代码: 前往查看

编译好的jar包: 点击下载


[1] Eclipse外部工具:就是调试、运行工具按钮旁边那个运行工具箱图标里面操作的东东,可以定义如何调用外部程序
[2] 创建补丁说明文件:需要使用svn 插件,先同步资源,然后选择资源文件点击右键->create Patch 选择保存到工作空间项目下面
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注