6.3 协调首选项设置
一旦使用了第2个工作空间,就会碰到首选项问题。您可以将它抽象为只有一组合理的首选项设置这样一种情况。假定大部分首选项设置是特定于所使用的工作空间的,那么您就面临着需要多次访问Preferences对话框以对作用于多个工作空间之上的首选项设置进行协调。
注意:
对于Eclipse中的一些工具来说,特定工作空间首选项设置这一概念是随着时间的流逝而发生变化的。尽管Eclipse平台会保存它自己的首选项设置信息,但是Eclipse API的发展已使得Eclipse中的工具可以使用更复杂的方法来对首选项设置信息进行处理。对于被称为用户设置的那些首选项来说,在存储这些首选项值的时候可以带有首选项的取值范围,这可以使得首选项值对配置、工作空间或者工作空间中的项目来说是惟一而又一致的。在对工具进行调整以支持新功能的使用后,某些首选项就可以不再特定于具体工作空间;在由于要管理多个工作空间的首选项设置而感到筋疲力尽的情况下,这将是一件好事情。在本书第16章“对话框和向导”中,我们会对用户设置API作进一步讨论。
在Eclipse中,有一个管理首选项的更好方法。在接下来的部分中,我们将讨论两种首选项的管理方法,在Eclipse用户策略中,每种方法都占有一席之地。至于是使用一种策略,还是两种策略都使用,取决于您的实际需要。执行同步操作所需的那些技巧可用于备用默认技术的信息查找。
6.3.1 同步首选项设置
Eclipse中含有大量的首选项页面和首选项设置。这就使得您可以对Eclipse开发环境的界面和行为进行个性化设置。粗略估计一下,您认为有多少个首选项页面以及多少个首选项设置呢?答案是没有一个固定的数字。这是因为,这些页面和设置的数目是趋向于不断变化的。但是,在我们使用的Eclipse 3.0 GA版本中,当前共有74个首选项页面。大多数首选项页面都至少有5个设置,还有一些首选项页面中有更多的设置;在Java compiler页面中就至少有45个页面。经过粗略估计,我们认为总共大约有350~500个首选项设置,但是实际数字可能比这个要少。对于那些作为首选项存储但是又没有显示在首选项页面上的设置,上面所给的首选项设置的粗略估计值并没有把它们包括进去。例如,当我们在Java源代码编辑器中打开某Java文件后,在Outline视图的工具栏上会出现一个下拉菜单,在该下拉菜单中有一个名为Go Into Top Level Type的触发选项;该选项就是作为首选项设置来存储的。
现在,让我们假设您已经访问了10%的首选项页面并修改了10%的选项;这就意味着您已经定制了至少35个首选项设置。现在,打开一个新的工作空间并在这个新的工作空间上重新完成上面的首选项设置。您可以完成这些首选项的设置吗?您当然可以了。但如果让Eclipse来完成绝大多数的首选项设置操作,事情会简单得多。您是否曾经注意过Preferences对话框左侧靠下位置处的Import和Export按钮?在从某一工作空间中导出了首选项页面设置后,您就可以将导出的首选项页面设置导入到另一个工作空间中。这样,在新工作空间中就有大约35个(或更多)您所喜欢的首选项被定制了。
进一步讲,您可以将所导出的首选项设置文件共享给项目组成员;这样,项目组所有成员一开始就可以使用相同的首选项设置。然后,项目组成员可以在您所给出的完美定义的基础上对首选项设置作进一步改进。
注意:
在小组特定设置中所采用的技术在某些领域是可以作进一步改善的。在Java | Code Style | Code Formatter首选项页面中,您可以对代码格式规则进行定义。所定义的规则是作为首选项来存储的。Code Formatter页面还支持代码格式规则定义(一个XML格式的文件)的直接导入/导出。这就使得我们可以对开发小组的编码规则作更细粒度的定义。
6.3.2 定义新的首选项默认设置
如果一个插件对某些首选项设置进行了定义,那么该插件就可以对这些首选项设置定义默认值。对于任何插件的默认首选项值,您都具有修改其默认值的权限。该权限是为基于Eclipse的产品设计的。这样就可以为这些基于Eclipse的产品定义默认首选项设置,以使得这些产品能更好地运行。但是作为Eclipse(或基于Eclipse产品)的使用者,您可以替换或调整这些默认设置以满足自己的需要。这就为您提供了将Eclipse调整的更好的另一种机会。要定制默认首选项,可以使用下面这两种技术。
● 指定自己的定制文件。您可使用调用参数-plugincustomization为所选的首选项关键属性指定一组备用默认配置。
● 修改已有的定制文件。您可先找出当前所用Eclipse的plugin_customization.ini文件,然后再对该文件进行定制以满足自己的需要。
首先,您需要对所用Eclipse(或基于Eclipse产品)的当前使用环境有所了解。Eclipse或基于Eclipse产品可使用plugin_customization.ini文件来提供备用的默认首选项设置。plugin_customization.ini文件是产品商标内容的一部分。基于Eclipse的产品使用该文件来定制首选项配置。您不可以覆盖这些产品的默认配置。或者,您至少要意识到自己即将执行的操作是要覆盖这些产品的默认配置。
因为使用调用参数-plugincustomization会覆盖已有的任何产品级定制信息,所以您可能想通过使用参数来指定产品定制文件(该文件作为修改和添加首选项设置的基础来使用)的一个副本,这样就可以综合使用上面的那两种方法。
要查找出产品的定制文件并创建一组自己的默认首选项设置以在Eclipse运行时使用,请执行下面的步骤。
(1) 找到\configuration\config.ini文件,然后打开该文件,并找出活动产品的id值(eclipse.product=)。对于Eclipse来说,这一项内容应该是eclipse.product= org.eclipse.platform.ide。需要指出的是,您也可以通过使用调用参数来定义活动产品。
(2) 找出该产品所绑定的插件。产品值是插件的id串连上插件的扩展id。请在\plugins目录下查找出id与活动产品id相似的插件。另外,如果能在\plugins目录下找到名为plugin_customization.ini的文件,则也请看一下这个文件。
在功能部件中也可以包含绑定的插件。尽管Eclipse和基于Eclipse的很多产品的id是相同的,但是产品功能部件的feature.xml文件可使用< feature >元素中的plugin=“another.plugin.id.value”属性来识别备选的绑定插件。
(3) 将plugin_customization.ini文件复制到一个私有位置中(甚至可以是所安装的Eclipse的根目录中)。
(4) 添加或修改plugin_customization.ini文件中的内容以满足自己的需要。
(5) 在启动Eclipse时使用合适的参数以在Eclipse(或基于Eclipse产品)运行时使用自己的定制文件:
eclipse –pluginCustomization file_reference
上述的步骤(4)所扮演的是“催化剂”的角色。那么您怎样才能在plugin_ customization.ini文件中查找并添加合适的值呢?当然,您需要实践、实践再实践。其关键是使用一个干净的工作空间,并且每次只查找很少数量的值。请使用一个新的工作空间,然后改变一个或两个首选项设置,接着如前面“同步首选项设置”一节中所讲的那样导出首选项设置。现在,请打开plugin_customization.ini文件,并检查每个条目所使用的关键字(这些关键字还是有点意思的)。然后,通过查看这些关键字名及其可能的取值,您就可以为所要定义的默认首选项找出所需的部分首选项设置以及取值。下面这个值就是我比较喜欢的:
/instance/org.eclipse.ui.workbench/
SHOW_TEXT_ON_PERSPECTIVE_BAR=false
您可能会感到奇怪的是,并不是所有的首选项值都是通过首选项页面进行设置的。下面这个首选项值对用Java源代码编辑器打开Outline视图中某文件时Outline视图的显示属性进行了设定。
/instance/org.eclipse.jdt.ui/
GoIntoTopLevelTypeAction.isChecked=true
所以,正如您可能会说的那样,我们并没有一个妙方可以找出全部有趣的首选项设置以定义新默认首选项。定义新默认首选项的可选方法是:载入并搜索Eclipse源代码,或者编写代码以找出那些可以对首选项值进行获取和设置的API调用。对于自己在打开新工作空间时总会要进行修改的那些首选项设置,如果您可以找出5个或10个,那么我们就认为这次的查找操作是很值得的。如果您正在协调项目小组的工作,那么就可以通过共享plugin_customization.ini文件的最新版本来最大化地发挥这种方法的效果。在这种情况下,小组中的所有成员在启动Eclipse时所使用的是相同的规则。
注意:
在IBM developerWorks站点的一篇名为Put Eclipse features to work for you的文章中,作者对在定制的Eclipse平台启动配置中查找首选项设置的过程作了详细介绍。这篇文章是以Eclipse 2.1为讨论对象的,但是阅读一下文中对查找策略所作的详细评论应该是比较有用的。您可在网址http://www-106.ibm.com/developerworkers/opensource/ l ibrary/os-ecfeat/中找到该文章。






