我正在开发一个 Eclipse 插件(或者实际上,一个基于 Eclipse 的应用程序的插件),它需要用户输入一些配置。
通过查看文档,似乎有两个首选项 API - 一个在 org.eclipse.core.runtime.preferences
中,扩展/实现 OSGI prefererence API ,另一个,JFace 特定的,在 org.eclipse.jface.preference
中.然后我们有 org.eclipse.ui.preferences
,也是。
OSGI API 有一个层次结构的节点树 - 一个首选项节点(Preferences
或 IEclipsePreferences
)可以有多个子节点,它们本身可以包含两个单独的名称-值对以及更多的子节点。这似乎适合我的用例 - 我有一个动态数量的“首选项组”,每个组都有大约三个字符串属性(名称、描述、命令),可以很好地映射到这些节点。
JFace API 没有这样的层次结构,每个插件只有一个平面 IPreferenceStore
。但它提供了首选项编辑器页面,然后可以通过实现 IWorkbenchPreferencePage
和 using the "org.eclipse.ui.preferencePages" extension point 将其包含在通常的首选项对话框(Window/Preferences)中. (我仍然必须自己实现部分首选项页面,但是这个 API 似乎为此提供了一个很好的基础。)
似乎org.eclipse.ui.preferences
API 通过提供基于 IEclipsePreferences 的 IPreferenceStore 实现以某种方式桥接了这两个 API,但我仍然看不出如何使用它。
所以我的问题是:如何在首选项对话框中使用分层 OSGI Preferences
?我只需要一个级别,但我需要用户能够动态添加新节点(每个节点大约有三个首选项)。 (不过,这些节点不必具有新的首选项页面。)
最佳答案
似乎在偏好页面级别,它想要与偏好商店合作。大多数插件从 org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore()
提供的默认设置中获取它们的偏好存储。这松散地转换为带有 InstanceScope 的 ScopedPreferenceStore,其节点与其 bundle.id 匹配。
获取匹配的 IEclipsePreferences 对象的等效方法是 InstanceScope.INSTANCE.getNode("bundle.id")
。这将允许您在下面添加更多节点,但无法从您的 IPreferenceStore 访问它们。但是,您的首选项页面可以将其首选项存储设置为插件的主要存储,并且仍然使用 IEclipsePreferences 或辅助 IPreferenceStore 来访问额外的首选项(您只需自己编写代码,类似于 org.eclipse.ui。 internal.dialogs.EditorsPreferencePage
).
关于java - Eclipse:OSGI 首选项与 PreferenceStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792565/