安装Spring Boot后Eclipse出现java.lang.NoSuchMethodError错误求助
Eclipse安装Spring Boot后报错"requesting java ast from selection"的解决办法
问题详情
安装Spring Boot插件到Eclipse后,弹出错误提示requesting java ast from selection。卸载Spring Boot插件、升级Java版本后,问题依然存在。错误日志核心内容如下:
!ENTRY org.eclipse.ui.workbench 4 2 2022-12-14 10:58:58.294 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench". !STACK 0 java.lang.NoSuchMethodError: com.ibm.icu.text.UTF16.isSurrogate(C)Z at org.eclipse.jdt.internal.ui.text.JavaWordFinder.findWord(JavaWordFinder.java:39) at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.updateOccurrenceAnnotations(JavaEditor.java:3300) at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor$ActivationListener.windowActivated(JavaEditor.java:1216) at org.eclipse.ui.internal.Workbench$8.run(Workbench.java:1005) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.ui.internal.Workbench.fireWindowActivated(Workbench.java:1002) at org.eclipse.ui.internal.WorkbenchWindow$6.shellActivated(WorkbenchWindow.java:2459) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:92) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4251) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1090) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1075) at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE(Decorations.java:1521) at org.eclipse.swt.widgets.Shell.WM_ACTIVATE(Shell.java:2314) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4743) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2286) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5026) at org.eclipse.swt.internal.win32.OS.DestroyWindow(Native Method) at org.eclipse.swt.widgets.Control.destroyWidget(Control.java:782) at org.eclipse.swt.widgets.Shell.destroyWidget(Shell.java:732) at org.eclipse.swt.widgets.Widget.release(Widget.java:831) at org.eclipse.swt.widgets.Widget.dispose(Widget.java:428) at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:392) at org.eclipse.jface.window.Window.close(Window.java:335) at org.eclipse.jface.dialogs.Dialog.close(Dialog.java:988) at org.eclipse.ui.internal.statushandlers.InternalDialog.close(InternalDialog.java:651) at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:739) at org.eclipse.jface.dialogs.TrayDialog.handleShellCloseEvent(TrayDialog.java:220) at org.eclipse.jface.window.Window$1.shellClosed(Window.java:685) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:102) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4251) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1090) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1075) at org.eclipse.swt.widgets.Decorations.closeWidget(Decorations.java:269) at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1552) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4748) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2286) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5026) at org.eclipse.swt.internal.win32.OS.CallWindowProc(Native Method) at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:506) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4847) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2286) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5026) at org.eclipse.swt.internal.win32.OS.CallWindowProc(Native Method) at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:506) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4847) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2286) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5026) at org.eclipse.swt.internal.win32.OS.DispatchMessage(Native Method) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3643) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:567) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596) at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
问题原因
这是ICU4J库版本冲突导致的:Eclipse的JDT组件依赖特定版本的ICU4J库,而Spring Boot插件可能引入了不同版本的ICU4J,或者Eclipse自带的ICU组件损坏、版本过低,导致找不到com.ibm.icu.text.UTF16.isSurrogate(C)Z方法。
解决步骤
1. 更新Eclipse的ICU4J组件
- 打开Eclipse,点击
帮助 > 安装新软件 - 在"工作空间"下拉框选择当前Eclipse版本对应的官方更新站点(比如2022-12版本的更新站)
- 搜索
ICU4J,找到International Components for Unicode (ICU4J)相关组件,选择更新到最新兼容版本 - 安装完成后重启Eclipse
2. 清理Eclipse插件缓存
- 关闭Eclipse
- 找到Eclipse安装目录下的
configuration\org.eclipse.osgi文件夹,删除内部所有文件(保留文件夹本身) - 进入工作空间目录,删除
.metadata\.plugins\org.eclipse.core.runtime下的所有文件 - 重启Eclipse,让插件重新加载
3. 重新安装兼容版本的Spring Boot插件
- 卸载现有Spring Boot插件:
帮助 > 关于Eclipse > 安装详细信息,找到Spring Boot相关插件并卸载 - 确认当前Eclipse版本,选择完全兼容的Spring Boot Tools版本(比如Eclipse 2022-12对应4.15.x版本)
- 通过
Eclipse Marketplace或官方更新站点重新安装,完成后重启Eclipse
4. 替换ICU4J jar包
- 关闭Eclipse
- 进入Eclipse安装目录的
plugins文件夹,搜索com.ibm.icu_*.jar - 删除旧版本的ICU jar包,下载与当前Eclipse JDT兼容的ICU4J版本(比如Eclipse 2022-12对应69.1版本)
- 将新jar包放入plugins文件夹,重启Eclipse
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

