当前位置: 代码迷 >> Eclipse >> Eclipse变量插件有关问题
  详细解决方案

Eclipse变量插件有关问题

热度:103   发布时间:2016-04-23 00:46:23.0
Eclipse变量插件问题

Eclipse变量插件问题

 

最近在研究JDT的源代码,因为首先感兴趣的是调试相关的功能,所以在查看JDT的源代码之前,首先看到Eclipse上的两篇比较不错的文章:

《We Have Lift-off  The Launching Framework in Eclipse》和

《How to Write an Eclipse Debugger》

前面一篇讲解了Eclipse的”启动框架”,后一篇讲解了Eclipse的调试框架。后一篇中,作者有个示例插件,我下下来调试,学习。在学习过程中,碰到一个奇怪的问题,就是我修改了plugin.xml文件后,却并不能生效,例如,这是原先的内容:

<extension

         point="org.eclipse.core.variables.valueVariables">

      <variable

    initialValue="c:\perl\bin\perl.exe"

            name="perlExecutable"

            description="Path to Perl executablein the local file system">

      </variable>

   </extension>

 

我修改为:

<extension

         point="org.eclipse.core.variables.valueVariables">

      <variable

            initialValue="D:\app\Administrator\product\11.2.0\dbhome_1\perl\bin\"

            name="perlExecutable"

            description="Path to Perl executablein the local file system">

      </variable>

   </extension>

 

第一次修改生效了,然后第二次我是在,“被调试的Eclipse进程”执行的时候修改为:

<extension

         point="org.eclipse.core.variables.valueVariables">

      <variable

            initialValue="D:\app\Administrator\product\11.2.0\dbhome_1\perl\bin\perl.exe"

            name="perlExecutable"

            description="Path to Perl executablein the local file system">

      </variable>

   </extension>

 

结果,没有起作用,而且后面无论我怎么操作,这个值就一直保持为: D:\app\Administrator\product\11.2.0\dbhome_1\perl\bin\。无论我是重启Eclipse也好,还是加-clean参数,都无济于事,百度和google了好长时间,也没找到问题所在,无奈之下,只好去查看org.eclipse.core.variables.valueVariables的源代码,终于发现了问题所在。请看以下代码:

/**

     * Load contributedvariables and persisted variables

     */

    private synchronized void initialize() {

       if (fDynamicVariables ==null) {

           fInternalChange = true;

           fDynamicVariables =new HashMap(5);

           fValueVariables = new HashMap(5);

           loadContributedValueVariables();

           loadPersistedValueVariables();

           loadDynamicVariables();

       InstanceScope.INSTANCE.getNode(VariablesPlugin.PI_CORE_VARIABLES).addPreferenceChangeListener(this);

           fInternalChange = false;

       }

    }

 

这里,在StringVariableManager 初始化的时候会先加载插件中的变量,然后再加载“持久化的变量值”。跟踪loadPersistedValueVariables()会发现perlExecutable的值为D:\app\Administrator\product\11.2.0\dbhome_1\perl\bin\

因此,修改后并不起作用。总会被覆盖掉,那么要怎么清除这个值呢?

 

Eclipse的Preferences的值是保存在以下位置的:

${workspace}\.metadata\.plugins\org.eclipse.core.runtime\.settings

 

打开org.eclipse.core.variables.prefs文件,是个xml文件,保存的就是变量的值。删掉这个文件,自然就会读取插件文件中定义的值。

 

总结:

   Eclipse的VariablesPlugin 会将定义的变量存储在工作空间的preferences中,如果修改plugin.xml文件中的变量值没有生效,最好检查一下工作空间中是否已经保存了值,如果保存了,需要删除这个文件,才能生效。

 

//*****************************************************************/

//**  本人原创文章,转摘请保留本段内容,万分感谢!

//**  microdreamsoft(Lin Shaohua):

//**  由于本人水平有限,欢迎各位高手指正。

//**  本人所有原创文章将发布在以下blog:

//**   http://hi.baidu.com/microdreamsoft

//**   http://blog.csdn.net/hydream

//**   http://www.cnblogs.com/MicroDreamSoft/

//**   http://websoso.bokee.com

//**   http://89727175.qzone.qq.com

//**   http://751728871.qzone.qq.com

//*****************************************************************/
  相关解决方案