代码之家  ›  专栏  ›  技术社区  ›  GregT

JMeter:NoClassDefFoundError使用jackson jar时出错

  •  2
  • GregT  · 技术社区  · 6 年前

    我正在JMeter中创建一个自定义Java采样器。它工作得很好。然而,当我希望它以JSON返回结果时,JMeter没有找到。jackson数据绑定库的jar,它是创建JSON所必需的。

    我把它放在JMeter主目录中的/lib/ext文件夹中。我还复制到/lib,但没有任何效果。(我知道/lib/ext不应该用于依赖JAR,但根据我的经验,JMeter在/lib中找不到我的实用JAR。)

    我尝试将路径添加到变量search\u paths,user。jmeter中的类路径和plugin\u dependency\u路径。属性。我尝试了绝对路径、相对路径、斜杠、反斜杠,但都没用。

    我尝试将JMETER\u HOME变量设置为安装地址。它起作用了,但没用。

    我尝试在两种环境中运行。第一个是在Eclipse中(我将JMeter复制到一个工作区文件夹,然后导入项目),使用JMeter 4.0。我在日志中发现以下错误:

    java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
        at (creating ObjectMapper here)
        at (creating ResponseJSON here)
        at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:197) ~[ApacheJMeter_java.jar:4.0 r1823414]
        at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:490) ~[ApacheJMeter_core.jar:4.0 r1823414]
        at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:416) ~[ApacheJMeter_core.jar:4.0 r1823414]
        at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:250) ~[ApacheJMeter_core.jar:4.0 r1823414]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
    

    我还从运行了JMeter 3.3。bat文件,将JAR添加到同一位置。我在控制台上发现此错误:

    Unknown error checking for existence of class: com.fasterxml.jackson.databind.ObjectMapper
    java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/Versioned
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$100(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Unknown Source)
            at org.apache.logging.log4j.util.LoaderUtil.loadClass(LoaderUtil.java:141)
            at org.apache.logging.log4j.util.LoaderUtil.isClassAvailable(LoaderUtil.java:115)
            at org.apache.logging.log4j.core.util.Loader.isClassAvailable(Loader.java:310)
            at org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory.<init>(YamlConfigurationFactory.java:47)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at org.apache.logging.log4j.core.util.ReflectionUtil.instantiate(ReflectionUtil.java:188)
            at org.apache.logging.log4j.core.config.ConfigurationFactory.addFactory(ConfigurationFactory.java:190)
            at org.apache.logging.log4j.core.config.ConfigurationFactory.getInstance(ConfigurationFactory.java:164)
            at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:613)
            at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
            at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
            at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
            at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
            at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
            at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
            at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
            at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
            at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
            at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
            at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
            at org.apache.jmeter.JMeter.<clinit>(JMeter.java:109)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at java.lang.Class.newInstance(Unknown Source)
            at org.apache.jmeter.NewDriver.main(NewDriver.java:246)
    Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.Versioned
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            ... 43 more
    

    我没有尝试调试类加载器,但当我在这里发布完后,这可能是下一步。

    我有此版本的文件,与我的POM中的文件相同:

    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.9.4

    1 回复  |  直到 6 年前
        1
  •  4
  •   Community CDub    4 年前

    部分 jackson-databind 依赖项特别是您可能缺少的jackson core jar,并在错误中包含缺少的类: com.fasterxml.jackson.core.Versioned

    看见 Jackson Installation :

    Jackson JSON API中的三个JAR文件(项目)是:

    • Jackson Core公司
    • Jackson注释
    • Jackson数据绑定