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」後保存,而後用這個修補後的類文件替換掉原來的就能夠了。這裏有一點要注意的是替換後的字符串長度要與原字符串長度同樣。工具

相關文章
相關標籤/搜索