如何让自定义Eclipse模板插件在模板上下文菜单中正常显示?
Eclipse自定义模板插件上下文未显示问题排查
问题概述
开发了一款Eclipse插件,用于通过自定义变量解析快速生成getter/setter方法。插件已被识别为已安装软件,但模板上下文始终未出现在模板设置区域中,尝试dropins部署和调试启动均无效。
核心代码与模板示例
模板示例
public ${type} get${varNameUpper}(${type}${varNameLower}){ return ${varNameLower}; }
变量解析类(Lower)
public class Lower extends SimpleTemplateVariableResolver { public Lower() { super("varNameLower", "Converts first letter to lower"); } @Override protected String resolve(TemplateContext context) { String variableName = context.getVariable("variableName"); if (variableName != null && !variableName.isEmpty()) { return variableName.substring(0, 1).toLowerCase() + variableName.substring(1); } return ""; } }
模板上下文类(Context)
public class Context extends TemplateContextType { public Context() { super("de.s231371.plugin.context"); // 注册变量解析器 addResolver(new Lower()); addResolver(new Upper()); } }
配置文件内容
MANIFEST.MF
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Automatic-Module-Name: de.s231371.plugin Bundle-Name: templateHandler Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-SymbolicName: de.s231371.plugin;singleton:=true Bundle-Version: 1.1.1 Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.jface.text;bundle-version="3.25.0"
plugin.xml
<?xml version="1.0" encoding="UTF-8"?> <plugin> <!-- Template Context Registration --> <extension point="org.eclipse.ui.editors.templates"> <contextType class="de.s231371.plugin.Context" id="de.s231371.plugin.context" name="Custom Plugin Template Context"> </contextType> <!-- Template Definition --> <template id="de.s231371.plugin.template" name="Custom Template" contextTypeId="de.s231371.plugin.context" description="A custom template for demonstration purposes"> <pattern> <![CDATA[ public ${type} get${varNameUpper}(${type} ${varNameLower}) { return ${varNameLower}; } public void set${varNameUpper}(${type} ${varNameLower}) { this.${varNameLower} = ${varNameLower}; } ]]> </pattern> </template> </extension> </plugin>
排查与解决步骤
绑定模板上下文到目标编辑器
默认情况下,自定义上下文类型不会自动关联Java编辑器,需在contextType中添加编辑器绑定:<contextType class="de.s231371.plugin.Context" id="de.s231371.plugin.context" name="Custom Plugin Template Context"> <editorBindings> <editorId>org.eclipse.jdt.ui.javaEditor</editorId> </editorBindings> </contextType>这一步是关键,否则模板上下文不会出现在Java编辑器的模板设置里。
验证插件激活状态
打开Help > About Eclipse > Installation Details > Plug-ins,找到de.s231371.plugin,确认状态为Active。若未激活,检查:- Bundle依赖是否完整,
org.eclipse.jface.text版本是否与当前Eclipse版本匹配(过高版本可能导致加载失败) - 类路径是否正确,
Context类的全限定名是否与plugin.xml中class属性一致
- Bundle依赖是否完整,
调试上下文加载流程
在Context构造函数中添加断点,以调试模式启动Eclipse,确认类是否被实例化。若未触发断点,说明扩展点注册存在问题:- 检查
plugin.xml中extension的point属性是否正确(org.eclipse.ui.editors.templates) - 确认
contextType的id与模板的contextTypeId完全一致
- 检查
清理Eclipse缓存
使用eclipse -clean命令启动Eclipse,或删除工作区.metadata/.plugins/org.eclipse.core.runtime/.settings下的模板相关配置文件,强制重新加载插件配置。
内容的提问来源于stack exchange,提问作者milash
相关产品推荐
相关产品推荐

