@kevinZheng
2014-12-19T07:50:21.000000Z
字数 2547
阅读 3134
eclipse
svn
class文件
工具
补丁
java web工程开发维护过程中经常遇到的场景就是修改个别后台类或者前台页面,然后打补丁上线,eclipse工具都是关注整体打包跟部署方便的,对补丁导出没有相关好用的方法(或者是我没找到)。所以就做了这个简单的小工具用来导出java编译的class文件和html这些资源文件,目前的版本是针对java web工程的如果是别的类型的项目也可以参考改造后使用。
最初考虑使用脚本实现,但是脚本不能跨平台而且我只会最简单的脚本处理复杂的字符串不擅长。索性就用擅长的java写这个工具了。整体想法就是做一个可执行的jar 供eclipse 外部工具[1]调用 。
/**
* 导出资源
* 目前只考虑代码,配置或其他资源文件暂不考虑
* 且只能每次导出一个文件,
* 判断资源路径中是否包含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
直接分割替换,需要用四个反斜杠“\\\\”
这一点需要注意。
window下eclipse外部工具指定jar文件直接作为可执行文件会报错,当时想到的方案是手动写个批处理,将eclipse传递出来的参数再传递给main函数即java -jar jeePatchExp.jar %1 %2 %3 %4 %5
这样。后来经过实验发现在windows下修改jar文件的默认打开方式改成java.exe就好了
具体配置使用方法及详细代码: 前往查看
编译好的jar包: 点击下载