我正在开发一个具有自定义项目性质的Eclipse插件。大自然本身运作良好。我需要实现一个特定于项目的属性页面,允许用户自定义特定于该性质的设置;到目前为止,我一直没有成功,会给予任何帮助。我设想这类似于Java本质如何允许人们设置特定于项目的编译器选项,格式化设置等。
项目设置存储在项目本身中至关重要,类似于(project root)/.settings/org.eclipse.jdt.*.prefs
中Java设置的存储方式。这些需要在该项目的源代码控制中,因此整个团队都要遵守相同的标准。
以下是我目前在plugin.xml中的内容:
<extension point="org.eclipse.ui.propertyPages">
<page id="test.MyOverlayPage"
name="%Key.PropertyPage"
class="test.MyOverlayPage">
<enabledWhen>
<instanceof value="org.eclipse.core.resources.IProject"/>
</enabledWhen>
</page>
</extension>
这显然不会像Java设置那样限制属性页面,但是目前这不会出现在任何项目中,更不用说具有自定义性质的项目了。
我发现以下问题没有解决我的具体问题:
Create our own property page for project explorer eclipse plugin
Eclipse: Storing info in .project file
我还发现了这个Eclipse帮助页面,这个页面严重缺乏细节,而且我无法在此基础上运行:
答案 0 :(得分:5)
Java属性页使用此:
<enabledWhen>
<adapt type="org.eclipse.core.resources.IProject">
<test property="org.eclipse.core.resources.projectNature"
value="org.eclipse.jdt.core.javanature"/>
</adapt>
</enabledWhen>
这使用adapt
而不是instanceof
,因为视图中的UI对象通常不是项目(或其他资源)的实例。相反,他们使用IAdapterManager
将UI类转换(适应)到工作区模型类。
test
元素添加了对项目性质的测试,这里是Java自然ID,但您可以替换自然ID。
要在项目.settings
中保存首选项,请使用以下内容:
IProject project = ... get project from selection or something
IScopeContext context = new ProjectScope(project);
Preferences projectPreferences = context.getNode("your nature id");
projectPreferences.put(key, value);
projectPreferences.flush();
答案 1 :(得分:1)
如果您的页面是org.eclipse.ui.dialogs.PropertyPage的扩展名,您可以通过以下方式获取项目:
private IProject getProject() {
final IAdaptable adaptable = getElement();
return adaptable == null ? null : (IProject) adaptable.getAdapter(IProject.class);
}