zoukankan      html  css  js  c++  java
  • 定制Eclipse IDE之杂症篇

    上文回顾:定制Eclipse IDE之插件篇(二)

    该篇将讲述在开发Eclipse 插件过程发生的疑难杂症。不谈功能,只说病症。

    前言、拿哪个Eclipse作为定制的基础?
    我建议是你用哪个Eclipse做开发,就使用那个Eclipse作为定制的基础,因为你的插件是在这上面开发的,决对不会出现缺少必要的依赖插件。如果觉得有些插件没必要的话,也自行删除。
     
    一、插件存在缓存的现象
    在开发插件的时候,有时会存在缓存了上一次运行插件结果的现象。
    解决办法:
    1.在run configurations的Eclipse Application里,勾选清除“工作空间”,同时把“清除之前请求确认”勾掉。
     
    二、插件里plugin_customization.ini一直不生效
    plugin_customization.ini里面是对Eclipse的一些全局配置。有可能你会在的透视图插件里指定自己的plugin_customization.ini,但是你会发现总是不生效。
    配置如下:
    <extension
       id="BingoTouch"
       point="org.eclipse.core.runtime.products">
         <product
           application="org.eclipse.ui.ide.workbench"
           name="%name">
              <property name="preferenceCustomization" value="plugin_customization.ini" />
              <property name="appName" value="BingoTouch" />
              <property name="windowImages" value="icons/eclipse16.png,icons/eclipse32.png" />
              <property name="aboutText" value="%aboutText" />
         </product>
    </extension>
     
    原因解析:
    其实这个是取决于你的eclipse.exe下的eclipse.ini指定运行的product是什么,打开这个文件我们会看到:
    -product
    org.eclipse.epp.package.rcp.product
    生效的只是这个product下的plugin_customization.ini
     
    解决办法:
    解决办法有两种,一是将指定product,指向自己插件(名称就是自己插件名 + product名)。例如:
    -product
    com.bingo.ide.perspective.BingoTouch

    另外一种是将你要生效的那个plugin_customization.ini覆盖eclipsepluginsorg.eclipse.epp.package.rcp_4.4.2.20150219-0708 目录里的plugin_customization.ini(我是用这种方法)。

     
    三、IDE的主题设置一直无效
    这个原因跟第二个有些类似,你在插件设置的主题一直无效,例如:
    <property
          name="cssTheme"
          value="com.appcelerator.titanium.rcp.theme.dashboard">
    </property>
    原因解析:
    还是生效是哪个product的原因
     
    解决办法:
    在指定的product里的plugin.xml,将cssTheme属性值改为你想要的主题id。
     
    四、导出的插件中文乱码了
    插件显示中文时候乱码了,你可能在插件里面偷懒直接写中文(正常应该是写在properties文件配置的,中文用unicode编码)。
    原因解析:
    插件里面如果有中文的话,你没有指定编译编码。
     
    解决办法:
    直接在build.properties编辑器的"build.properties"编辑页中,在文件最后添加如下内容(切记两个点不能少):
    javacDefaultEncoding.. = UTF-8

    五、插件的控制台输出在mac上显示乱码

    插件控制台输出在window正常,而在mac上显示乱码了。
    解决办法:
    在mac的eclipse.ini加上:
    -Dfile.encoding=UTF-8 
     
    六、第二次打开eclipse,工具栏上自己新增的图标向右偏移了
    在第一次打开eclipse时候,自己新增图标还是正常显示的,当第二次以后打开eclipse时候,图标就往右偏移了。
    原因解析:
    这个可能有不同原因,不过我的这个情况是因为主题使用的原因。 我用了aptana的主题,但在主题的样式文件里面有
    .MToolControl.TrimStack {
         handle-image: url(chrome://drag-handle?height=22&background-color=#cccccc&embossed=true);
    }

    里面handle-image的url无法访问,引发的问题。

    解决办法:
    将里面的图标下到本地,换相对路径就正常了。
    .MToolControl.TrimStack {
         handle-image: url(./dragHandle.png);
    }
     
    七、直接运行插件生效,导出放到新eclipse没有效果
    这个问题是个致命的问题,而为了这个问题,我花了两天去检查(虽然很多的尝试都是没有效果,但最终都引导到正确的路上)。
    我尝试用OSGi控制台来检查问题(因为篇幅问题,我写在另一篇文章):Eclipse OSGi调试过程
    发现我的插件根本没有加载到,更别谈找错误了。
     
    原因解析:
    在百思不得其解时候,突然想到一个问题,eclipse是不是本身认不到插件,是否有个地方配置这些插件信息。后来终于被我发现,eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
    所有启动插件都在这里定义,那就是我需要将我的插件放到这里。
     
    解决办法:
    例如:
    com.bingo.ide.perspective,1.0.0,dropins/eclipse/plugins/com.bingo.ide.perspective_1.0.0.jar,4,false
    我把我的插件信息在这,果然生效了。
     
    相关问题:
    这出现另外一个问题,因为我的eclipse插件有90多个(别问我为什么这么多),我不可能一条条信息去定义,生成Bundles.info信息,这样太蠢了。
    于是整理了一个简单的Java程序去生成。代码如下:
    import java.io.File;
    
    /**
    * 插件生成后,生成Bundles.info
    * @author lufeng
    */
    public class BuildInfo {
        
         final static String exportPluginPath = "F:\source\bingo-touch\ide\release\window_64\eclipse\dropins\eclipse\plugins\";
         final static String pluginPath ="dropins/eclipse/plugins/";
        
         public static void main(String[] args) {
        
                 File direct = new File(exportPluginPath);
                 File[] files = direct.listFiles();
                 for(File f : files){
                     String s = f.getName();
                     int p = s.lastIndexOf("_");
                     if(p == -1)
                          continue;
                     String name = s.substring(0, p);
                     String version = s.substring(p+1);
                     if(version != null && !"".equals(version))
                          version = version.substring(0, version.lastIndexOf("."));
                     //.jar直接拼接,文件夹形式的后边加"/"
                     if(f.isDirectory())
                         s = s+"/";
                     System.out.println(name+","+version+","+pluginPath +s+",4,false");
                 }
             }
        
    } 
     
    六篇关于我这个月的Eclipse定制就到此为止,希望能帮到人。
     
    本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。
    本文地址 :http://www.cnblogs.com/lovesong/p/4694757.html
  • 相关阅读:
    linux signal之初学篇
    Eclipse 每次打开workspace目录记录位置?
    [Clojure] A Room-Escape game, playing with telnet and pure-text commands
    孔雀翎----《Programming C# 》中国版 文章4版
    js一些编写的函数
    KVM,QEMU核心分析
    apche commons项目简介
    java基础—网络编程———建立聊天的形式
    学习算法
    css+html+js实现多级下拉和弹出菜单
  • 原文地址:https://www.cnblogs.com/lovesong/p/4694757.html
Copyright © 2011-2022 走看看