Eclipse首店持久性(Eclipse Preference store persistance)

2019-08-17 13:49发布

我目前使用的几个用户可配置选项多用户/地点RCP应用程序。 有些选项是用于具体到车站,有些是特定于用户。

这些选项是从偏好店节省了* .prefs文件“workspace.metadata.plugins \ org.eclipse.core.runtime.settings”。

这如果我们只用一台机器/用户被罚款。 但是,如果用户到另一个站,那么用户将使用任何的优先选择是设置了该站。

是否可以指定其他形式的持久性(而不是文件)?

Answer 1:

这听起来像你需要存储在一个中心位置,所有用户/机器可以达到你的喜好。 这意味着你要实现自己的IPersistentPreferencesStore 。 然后你就可以覆盖org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore()来使用它。

更大的问题是如何实现中央喜好店,但是这取决于你所使用的技术。 在一般情况下,如果你的项目使用中央服务器,你应该有存储您的偏好。 例如,如果你的项目已经使用关系数据库,一个解决办法是建立相应的数据库表和实施IPersistentPreferencesStore通过JDBC访问这些表。



Answer 2:

根据对日食维基 ,偏好是基于文件的,并保存:

  • 每个安装(但是这可能对于多用户安装的变化),在存储在文件中<eclipse_home>/eclipse/configuration/.settings/
    通常有每个插件一个文件,具有.prefs扩展。
    需要注意的是极少数的插件安装使用全偏好。
  • 为每个工作区,在文件存储在<workspace>/.metadata/.plugin/org.eclipse.core.runtime/.settings
    通常有每个插件一个文件,具有.prefs扩展。
  • 每个项目-用于项目级的设置-存储在一个文件中.settings项目文件夹中的子目录

因此,如果文件选项是在这里留下来,你可能需要:

  • 任一出口/手动的用户特定的目录重新导入的会话设置(乏味)
  • 或做出某种自动机制:
    • 要设置导出到用户的注册表( HKEY_CURRENT_USER/Software/MyRCP/...在应用程序的退出),和
    • 通过阅读这些注册表项并重写导入它们.prefs在本地文件workspace.metadata.plugins\org.eclipse.core.runtime.settings目录
  • 或共享通过某种用户特定链接的这些设置(围绕RCP的启动的包装将负责作出正确的链接,即使是在Windows 与路口为例)


Answer 3:

你应该阅读有关多用户安装

在我们的例子中,我们通过设置的config.ini包括以下分离从应用程序配置每个用户的喜好:

osgi.instance.area=@user.home/Application Data/earthrise
osgi.configuration.area=@user.home/Local Settings/Application Data/earthrise/144/configuration
osgi.sharedConfiguration.area=c:/program files/earthrise/configuration
osgi.configuration.cascaded=true

这样做的结果是,由用户设置的偏好设置保存在他们的漫游配置文件,但是应用程序特定的配置数据存储在本地设置。

这并不解决具有特定于特定工作站的用户偏好的问题,但允许有每个用户有自己的喜好。

跟这个有美中不足的是,Eclipse的错误日志文件将被存储在实例区域并获得他们的漫游配置文件随身携带 - 不是你想真的是。 您可以在插件围绕此代码。 看到日食的Bugzilla的解决办法 - 搜索256502



Answer 4:

只是一个想法!

由于PreferenceStore的负载()方法:

public void load() throws IOException {
    FileInputStream in = new FileInputStream(filename);
    load(in);
    in.close();
}

你可以创建一个PreferenceStore

PreferenceStore(String filename)

或者设置文件名

public void setFilename(String name) {
    filename = name;
}

你也许可以“砍”的文件名来一些地方共享服务器(或共享个人文件夹可能是用户)...



文章来源: Eclipse Preference store persistance