Easyexplorer1.04修补

1.问题

easyexplorer是eclipse下直接在资源管理器中打开文件的一个插件。笔者在网上下载的是1.0.4版本。这个版本在windows下运行良好,但它只支持windows与mac系统(后面会说明缘由),若是在linux上打开会提示:java


2.缘由

在网上有的说能够经过设置这个插件的执行命令为“nautilus {0}”就能够了,但结果却很使人失望。经过反编译这个插件咱们会发现它为何在linux上运行失败,以下是反编译EasyExplorePlugin.class获得的其中一个方法
linux

 public boolean isSupported()
  {
    String osName = System.getProperty("os.name");

    return (osName.indexOf("Windows") != -1) || 
      (osName.indexOf("Mac") != -1);
  }

很明显easyexplorer就是经过这个方法来判断是否支持在某个系统上的运行。windows

3.修补

既然要修改的地方找到了,那接下来就是修补了。
由于笔者不会eclipse插件开发,也没有开发所须要的环境,因此没法从源码直接修补编译这个类。这里用到了一个第三方的工具:javassist
在elipse中新建一个项目,而后将javassist.jar与easyexplorer.jar(从下载获得的org.sf.easyexplore_1.0.4.jar中解压获得)加入到这个工程的classpath上。编写以下代码:
eclipse

public static void main(String[] args) throws Exception{
        
        ClassPool cp=ClassPool.getDefault();
        //取得EasyExplorePlugin的编译时Class
        CtClass ct=cp.getCtClass("org.sf.easyexplore.EasyExplorePlugin");
        //获得isSupported编译时方法
        CtMethod targetMethod=ct.getDeclaredMethod("isSupported");
        //修改这个方法
        targetMethod.setBody("{return true;}");
        //将修改后的EasyExplorePlugin类保存起来
        ct.writeFile("/home/acer/Desktop/current/");
    }

用运行上面代码,将获得的 EasyExplorePlugin.class替换掉原easyexplorer.jar中的 EasyExplorePlugin.class文件,而后将修补后的插件复制到eclipse安装目录的plugins目录下(若是之前有这个插件,要先把这个插件删除并重启eclipse后再复制)。接下来在window->prefrences->Easy Explorer配置easyexplorer执行命令为"nautilus {0}"就能够了。若是您系统使用的是其余文件管理器,请将nautilus换成您可在命令行中访问的对应管理器的运行指令。编辑器

4.后话

其实还有个更简便的方法进行修补,即直接修补这个 EasyExplorePlugin.class类文件:
用十六进制编辑器打开这个 EasyExplorePlugin.class文件,而后搜索“Mac”文本,将搜索到的“Mac”字符串替换成“Lin”后保存,而后用这个修补后的类文件替换掉原来的就能够了。这里有一点要注意的是替换后的字符串长度要与原字符串长度同样。工具

相关文章
相关标签/搜索