You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse嵌入XText编辑器失败:无法创建org.eclipse.xtext.XText注入器

Eclipse嵌入式XText编辑器Guice注入错误解决指南

问题重现

我在Eclipse环境中尝试实现嵌入式XText编辑器,已经配置好目标平台的所有依赖插件,产品也能正常启动,但在添加参考嵌入式编辑器的实现代码后,触发了Guice注入错误,核心报错为Missing contribution for type: org.eclipse.xtext.ui.containers.JavaProjectsState。

完整报错日志

0 [main] ERROR org.eclipse.xtext.xtext.ui.internal.Activator - Failed to create injector for org.eclipse.xtext.XText
!ENTRY org.apache.log4j 4 0 2020-07-09 11:56:48.422
!MESSAGE org.eclipse.xtext.xtext.ui.internal.Activator - Failed to create injector for org.eclipse.xtext.XText
9 [main] ERROR org.eclipse.xtext.xtext.ui.internal.Activator - Guice creation errors:
1) Error injecting method, java.lang.IllegalStateException: Missing contribution for type: org.eclipse.xtext.ui.containers.JavaProjectsState
  at org.eclipse.xtext.ui.shared.Access$InternalProviderForContribution.inject(Unknown Source)
  at org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:76)
1 error
com.google.inject.CreationException: Guice creation errors:
1) Error injecting method, java.lang.IllegalStateException: Missing contribution for type: org.eclipse.xtext.ui.containers.JavaProjectsState
  at org.eclipse.xtext.ui.shared.Access$InternalProviderForContribution.inject(Unknown Source)
  at org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:76)
1 error
  at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
  at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:175)
  at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109)
  at com.google.inject.Guice.createInjector(Guice.java:95)
  at com.google.inject.Guice.createInjector(Guice.java:72)
  at com.google.inject.Guice.createInjector(Guice.java:62)
  at org.eclipse.xtext.xtext.ui.internal.Activator.createInjector(Activator.java:67)
  at org.eclipse.xtext.xtext.ui.internal.Activator.getInjector(Activator.java:55)
  at org.eclipse.xtext.xtext.ui.XtextExecutableExtensionFactory.getInjector(XtextExecutableExtensionFactory.java:26)
  at org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory.create(AbstractGuiceAwareExecutableExtensionFactory.java:54)
  at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:265)
  at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:63)
  at org.eclipse.ui.internal.WorkbenchPlugin.lambda$0(WorkbenchPlugin.java:288)
  at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:72)
  at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:286)
  at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceNode.createPage(WorkbenchPreferenceNode.java:52)
  at org.eclipse.jface.preference.PreferenceDialog.createPage(PreferenceDialog.java:1279)
  at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.createPage(FilteredPreferenceDialog.java:343)
  at org.eclipse.jface.preference.PreferenceDialog.showPage(PreferenceDialog.java:1166)
  at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.showPage(FilteredPreferenceDialog.java:635)
  at org.eclipse.jface.preference.PreferenceDialog$5.lambda$0(PreferenceDialog.java:660)
  at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:72)
  at org.eclipse.jface.preference.PreferenceDialog$5.selectionChanged(PreferenceDialog.java:657)
  at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:817)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47)
  at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:176)
  at org.eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.java:814)
  at org.eclipse.jface.viewers.StructuredViewer.handlePostSelect(StructuredViewer.java:1183)
  at org.eclipse.jface.viewers.StructuredViewer.lambda$0(StructuredViewer.java:1206)
  at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84)
  at org.eclipse.jface.util.OpenStrategy.firePostSelectionEvent(OpenStrategy.java:263)
  at org.eclipse.jface.util.OpenStrategy.access$5(OpenStrategy.java:258)
  at org.eclipse.jface.util.OpenStrategy$1.lambda$1(OpenStrategy.java:428)
  at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
  at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
  at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3919)
  at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3550)
  at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
  at org.eclipse.jface.window.Window.open(Window.java:799)
  at org.eclipse.ui.internal.OpenPreferencesAction.run(OpenPreferencesAction.java:66)
  at org.eclipse.jface.action.Action.runWithEvent(Action.java:474)
  at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580)
  at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:412)
  at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
  at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4131)
  at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1056)
  at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3944)
  at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3547)
  at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1173)
  at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
  at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1062)
  at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
  at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:635)
  at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
  at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:559)
  at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
  at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:155)
  at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660)
  at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597)
  at org.eclipse.equinox.launcher.Main.run(Main.java:1468)
  at org.eclipse.equinox.launcher.Main.main(Main.java:1441)
Caused by: java.lang.IllegalStateException: Missing contribution for type: org.eclipse.xtext.ui.containers.JavaProjectsState
  at org.eclipse.xtext.ui.shared.internal.SharedStateContributionRegistryImpl.getLazySingleContributedInstance(SharedStateContributionRegistryImpl.java:98)
  at org.eclipse.xtext.ui.shared.Access$InternalProviderForContribution.inject(Access.java:67)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at com.google.inject.internal.SingleMethodInjector$1.invoke(SingleMethodInjector.java:71)
  at com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:90)
  at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110)
  at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75)
  at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73)
  at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
  at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:73)
  at com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:147)
  at com.google.inject.internal.Initializer.injectAll(Initializer.java:92)
  at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:173)
... 69 more
!ENTRY org.apache.log4j 4 0 2020-07-09 11:56:48.428
!MESSAGE org.eclipse.xtext.xtext.ui.internal.Activator - Guice creation errors:
1) Error injecting method, java.lang.IllegalStateException: Missing contribution for type: org.eclipse.xtext.ui.containers.JavaProjectsState
  at org.eclipse.xtext.ui.shared.Access$InternalProviderForContribution.inject(Unknown Source)
  at org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:76)
1 error

解决方法

这个错误本质是XText的共享状态组件未正确注册或加载,结合实践经验,你可以尝试以下几个步骤:

  • 检查插件依赖:确认你的项目插件依赖中包含org.eclipse.xtext.ui.shared,且该插件已被正确纳入目标平台,同时保证org.eclipse.xtext.ui插件的所有必要子组件都已加载。
  • 注册贡献组件:如果是在RCP应用中使用,需要手动注册JavaProjectsState的贡献。可以通过添加扩展点org.eclipse.xtext.ui.shared.sharedStateContribution,指定对应的实现类来完成配置。
  • 清理重建项目:缓存异常可能导致依赖加载失败,尝试清理Eclipse工作区缓存,重新构建目标平台和项目,确保所有插件都被正确解析和激活。
  • 检查运行配置:在产品的运行配置中,确认所有必要的XText相关插件都已被包含在运行时插件列表中,没有被遗漏。

这些步骤应该能帮你解决Guice注入时缺少JavaProjectsState贡献的问题。


内容的提问来源于stack exchange,提问作者georgiana_e

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:07:40