如何通过编程修改Eclipse RCP未知文件类型关联?
解决RCP 3.x中未知文件默认关联文本编辑器的问题
我之前做RCP 3.x项目时刚好碰到过一模一样的需求,给你分享两个靠谱的实现方案,都是通过代码修改默认偏好来达成目标:
方案一:插件启动时直接设置默认偏好
如果想快速验证效果,可以在插件的start方法里直接修改Eclipse UI的偏好存储:
@Override public void start(BundleContext context) throws Exception { super.start(context); // 获取Eclipse UI的全局偏好存储 IPreferenceStore uiPrefStore = PlatformUI.getPreferenceStore(); // 文本编辑器的固定ID是org.eclipse.ui.DefaultTextEditor // setDefault只会在用户从未修改过该偏好时生效,不会覆盖用户已有的设置 uiPrefStore.setDefault("unknownEditorID", "org.eclipse.ui.DefaultTextEditor"); // 如果你有强制覆盖用户设置的特殊需求,才用setValue(不推荐) // uiPrefStore.setValue("unknownEditorID", "org.eclipse.ui.DefaultTextEditor"); }
方案二:使用偏好初始化器(官方推荐)
更规范的做法是通过Eclipse的IPreferenceInitializer扩展点来设置默认偏好,这是官方推荐的初始化默认配置的方式:
1. 创建偏好初始化器类
package com.your.project.package; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.PlatformUI; public class EditorPreferenceInitializer extends AbstractPreferenceInitializer { @Override public void initializeDefaultPreferences() { IPreferenceStore store = PlatformUI.getPreferenceStore(); // 绑定未知文件到文本编辑器 store.setDefault("unknownEditorID", "org.eclipse.ui.DefaultTextEditor"); } }
2. 在plugin.xml中注册初始化器
添加以下扩展点配置:
<extension point="org.eclipse.core.runtime.preferenceInitializers"> <initializer class="com.your.project.package.EditorPreferenceInitializer"> </initializer> </extension>
关键注意事项
- 必须确保你的RCP应用依赖了
org.eclipse.ui.editors插件,因为文本编辑器是这个插件提供的。在MANIFEST.MF里添加依赖:
版本号根据你的RCP 3.x实际版本调整即可。Require-Bundle: org.eclipse.ui.editors;bundle-version="3.10.0" - 测试前记得清空工作区的
.metadata目录,确保默认偏好是首次初始化状态,否则可能看不到预期效果。
这样配置后,用户首次启动你的RCP应用时,未知文件类型就会默认关联到Eclipse文本编辑器,拖放这类文件时会直接在文本编辑器中打开,不会再调用系统默认编辑器了。
内容的提问来源于stack exchange,提问作者781227
相关产品推荐
相关产品推荐

