Easyexplorer1.04修补

1.问题

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

Easyexplorer1.04修补_第1张图片

2.原因

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

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

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

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

3.修补

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

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”后保存,然后用这个修补后的类文件替换掉原来的就可以了。这里有一点要注意的是替换后的字符串长度要与原字符串长度一样。

你可能感兴趣的:(Easyexplorer1.04修补)