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

JMeter运行Jar包调用内部方法时抛出NoClassDefFoundError错误如何解决

java.lang.NoClassDefFoundError: org/json/simple/JSONObject
    at CloudBLM_API.ApiAuthentication.<init>(ApiAuthentication.java:23) ~[ModelPublishWebGL.jar:?]
    at CloudBLM_API.Publisher.<init>(Publisher.java:18) ~[ModelPublishWebGL.jar:?]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_201]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_201]
    at sun.reflect.DelegatingMethodAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_201]
    at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_201]
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83) ~[groovy-all-2.4.16.jar:2.4.16]
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105) ~[groovy-all-2.4.16.jar:2.4.16]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59) ~[groovy-all-2.4.16.jar:2.4.16]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:238) ~[groovy-all-2.4.16.jar:2.4.16]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:250) ~[groovy-all-2.4.16.jar:2.4.16]
    at Script6.run(Script6.groovy:13) ~[?:?]
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:321) ~[groovy-all-2.4.16.jar:2.4.16]
    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.16.jar:2.4.16]
    at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_201]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:223) ~[ApacheJMeter_core.jar:5.2.1]
    at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:44) ~[ApacheJMeter_components.jar:5.2.1]
    at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:931) ~[ApacheJMeter_core.jar:?]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:569) ~[ApacheJMeter_core.jar:?]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:490) ~[ApacheJMeter_core.jar:?]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:257) ~[ApacheJMeter_core.jar:?]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
Caused by: java.lang.ClassNotFoundException: org.json.simple.JSONObject
    at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_201]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_201]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_201]
    ... 22 more
问题原因

上述错误是JMeter运行时类路径缺失依赖导致的。你的自定义Jar包ModelPublishWebGL.jar依赖json-simple库处理JSON逻辑,CMD和Jenkins运行正常是因为这两个环境的类路径已经配置了该依赖,而JMeter默认不会自动加载自定义Jar的关联依赖,因此触发类找不到异常。

解决方法
  • 方案1:构建包含全量依赖的Fat Jar
    打包自定义Jar时通过构建工具把所有依赖(包括json-simple)一起打进同一个Jar包:

    • Maven环境使用maven-shade-plugin插件完成打包
    • Gradle环境使用shadow插件完成打包
      打包完成后将Fat Jar放到JMeter安装目录的lib/ext文件夹下,重启JMeter即可生效。
  • 方案2:单独添加缺失的依赖包
    下载和开发时版本完全一致的json-simple Jar包,和你的ModelPublishWebGL.jar一起放到JMeter安装目录的lib/ext文件夹下,必须重启JMeter后依赖才会被加载。

注意事项
  • 不要在JMeter的lib、lib/ext目录下存放重复的Jar包,避免引发类加载冲突
  • 若使用方案2,务必保证json-simple的版本和开发自定义Jar时使用的版本一致,避免版本不兼容引发其他运行异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:06:04