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

Eclipse 4.24装WebLogic插件后ICU4J方法缺失错误求助(不升级)

Eclipse 4.24安装WebLogic插件后ICU4J方法缺失错误解决方案

环境配置

  • eclipse.buildId=4.24.0.I20220607-0700
  • java.version=11.0.17
  • BootLoader常量:OS=macosx, ARCH=aarch64, WS=cocoa

错误现象

安装Oracle WebLogic Server Tools插件(版本17.3.0.201903121357)后,执行“Requesting Java AST from selection”触发内部错误,核心报错:

java.lang.NoSuchMethodError: com.ibm.icu.text.UTF16.isSurrogate(C)Z

原因分析

ICU4J版本冲突:Eclipse 4.24依赖的ICU4J版本包含boolean isSurrogate(char char16)方法,而WebLogic插件引入的ICU4J 72版仅提供boolean isSurrogate(int codePoint)方法,导致方法查找失败。

已尝试方案

手动删除ICU4J 72插件,但会连带移除Eclipse中的Maven组件,不可行。

完整错误日志

执行“Requesting Java AST from selection”时发生内部错误。
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.lambda$4(JavaEditor.java:3363)
at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithASTManager.java:175)
at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup$1.run(SelectionListenerWithASTManager.java:151)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

调用插件“org.eclipse.ui.workbench”中的代码时出现问题。
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:4604)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1524)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1547)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1528)
at org.eclipse.swt.widgets.Shell.windowDidBecomeKey(Shell.java:2314)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:6373)
at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:229)
at org.eclipse.swt.widgets.Widget.becomeKeyWindow(Widget.java:390)
at org.eclipse.swt.widgets.Shell.becomeKeyWindow(Shell.java:533)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:6092)
at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
at org.eclipse.swt.internal.cocoa.NSWindow.close(NSWindow.java:57)
at org.eclipse.swt.widgets.Shell.destroyWidget(Shell.java:819)
at org.eclipse.swt.widgets.Widget.release(Widget.java:1373)
at org.eclipse.swt.widgets.Control.release(Control.java:2970)
at org.eclipse.swt.widgets.Widget.dispose(Widget.java:695)
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:4604)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1524)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1547)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1532)
at org.eclipse.swt.widgets.Shell.closeWidget(Shell.java:624)
at org.eclipse.swt.widgets.Shell.windowShouldClose(Shell.java:2518)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:6278)
at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:236)
at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2162)
at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2487)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:6405)
at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5653)
at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5792)
at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:117)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3963)
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:566)
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)

可行解决方案(无需升级Eclipse 4.24)

方案1:强制优先加载Eclipse原生ICU4J版本

  1. 打开Eclipse安装目录下的configuration/config.ini文件
  2. 在文件末尾添加或修改osgi.bundles配置,将Eclipse自带的ICU4J包放在最前面:
    osgi.bundles=com.ibm.icu_<你的Eclipse原生ICU4J版本号>:start, <保留原有osgi.bundles内容>
    
    示例:若plugins目录下的ICU4J包为com.ibm.icu_67.1.0.v20200831-0906.jar,则配置为:
    osgi.bundles=com.ibm.icu_67.1.0.v20200831-0906:start, ...
    
  3. 保存文件后重启Eclipse。

方案2:修改WebLogic插件依赖配置

  1. 找到WebLogic插件的安装目录,定位到MANIFEST.MF文件
  2. 修改其中的ICU4J依赖声明,将版本范围限制为Eclipse兼容的版本(如[67.0.0,68.0.0)):
    Require-Bundle: com.ibm.icu;bundle-version="[67.0.0,68.0.0)"
    
  3. 删除Eclipse缓存目录configuration/org.eclipse.osgi,重启Eclipse。

方案3:手动安装兼容版ICU4J并设置强制依赖

  1. 打开Eclipse,依次进入Help > Install New Software > What is already installed?
  2. 找到Oracle WebLogic Server Tools插件,查看其依赖的ICU4J包版本
  3. 手动安装与Eclipse 4.24兼容的ICU4J版本(如67.x),安装时勾选“Force install of this plugin”选项,覆盖WebLogic插件引入的高版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:25:17