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

向Eclipse插件添加Jar包至类路径失败,报NoClassDefFoundError

如何正确将org.json.simple Jar包添加到Eclipse插件类路径?

问题描述

我正尝试将org.json.simple Jar包添加至一个Eclipse插件中。查阅资料后,我尝试了右键项目→Build Path→配置→库→添加外部Jar的操作,也试过使用“添加Jar”并将Jar包放在项目根目录或lib文件夹下,但均未生效。无论是在Eclipse中启动应用,还是导出后启动,都持续出现NoClassDefFoundError错误(启动画面不显示为另一独立问题)。我目前的临时解决方案是将该Jar包的源码制作成插件并添加到我的feature中。

错误日志

!SESSION 2024-09-01 13:58:16.796 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_421
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -product tcmagic.ui.product -clearPersistedState
Command-line arguments:  -product tcmagic.ui.product -data C:\Users\Danny\Downloads\EclipseRcpPluginDev\Neon3\workspace11/../runtime-tcmagic.product -dev file:C:/Users/Danny/Downloads/EclipseRcpPluginDev/Neon3/workspace11/.metadata/.plugins/org.eclipse.pde.core/tcmagic.product/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog -clearPersistedState -data @noDefault

!ENTRY org.eclipse.osgi 4 0 2024-09-01 13:58:20.829
!MESSAGE Application error
!STACK 1
org.eclipse.e4.core.di.InjectionException: org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:65)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:282)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:259)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:107)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.lambda$0(E4Application.java:238)
    at java.util.Optional.ifPresent(Unknown Source)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:234)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:148)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
    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:673)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
Caused by: org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException)
    at org.eclipse.swt.SWT.error(SWT.java:4533)
    at org.eclipse.swt.SWT.error(SWT.java:4448)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4211)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3827)
    at tcmagic.ui.Splash.prompt(Splash.java:119)
    at tcmagic.ui.LifeCycle.postContextCreate(LifeCycle.java:25)
    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.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    ... 20 more
Caused by: java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
    at tcmagic.db.mtgjson.Mtgjson.getSetListFile(Mtgjson.java:102)
    at tcmagic.db.mtgjson.Mtgjson.getSetLists(Mtgjson.java:110)
    at tcmagic.db.Database.createCards(Database.java:41)
    at tcmagic.ui.Splash.run(Splash.java:51)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
    ... 29 more
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException cannot be found by tcmagic.db_1.0.0.qualifier
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 35 more
An error has occurred. See the log file
C:\Users\Danny\Downloads\EclipseRcpPluginDev\Neon3\workspace11\.metadata\.plugins\org.eclipse.pde.core\tcmagic.product\1725217097207.log.

解决方案

方法1:将Jar包嵌入到插件中(推荐)

  • 在插件项目内创建lib文件夹,把org.json.simple.jar复制进去
  • 右键插件项目 → PDE Tools → Open Manifest Editor(打开MANIFEST.MF文件)
  • 切换到Runtime标签页,在Classpath区域点击Add,选择lib/org.json.simple.jar添加
  • 切换到Build标签页,在Binary Build区域勾选lib文件夹及其中的Jar包,确保构建时包含该文件
  • 保存MANIFEST.MF,重新构建插件项目后测试

方法2:将Jar包转换为独立OSGi插件(适合多项目复用)

  • 打开File → New → Project → Plug-in from existing JAR archives
  • 选择org.json.simple.jar,按照向导完成OSGi插件的创建
  • 在目标插件的MANIFEST.MF的Dependencies标签页,添加这个新插件的依赖
  • 更新feature和product配置,确保包含该新插件

配置验证要点

  • 检查MANIFEST.MF的Bundle-ClassPath是否包含lib/org.json.simple.jar(方法1)
  • 确认插件依赖列表已正确添加对应的OSGi插件(方法2)
  • 重启PDE应用,验证NoClassDefFoundError是否消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:20:54