JMeter:使用 jackson jar 时出现 NoClassDefFoundError 错误

JMeter: NoClassDefFoundError error when used jackson jar

我正在 JMeter 中创建自定义 Java 采样器。它工作得很好。但是,当我希望它 return 结果为 JSON 时,JMeter 没有找到创建 JSON 所需的 jackson-databind 库的 .jar。

我放到了JMeter主目录下的/lib/ext文件夹下。我也复制到/lib,没有用。 (我知道 /lib/ext 不应该用于依赖 jar,但根据我的经验,JMeter 在 /lib 中找不到我的实用程序 jar。)

我尝试在jmeter.properties中添加变量search_paths、user.classpath和plugin_dependency_paths的路径。我尝试了绝对路径、相对路径、斜杠、反斜杠,但都没有帮助。

我尝试将 JMETER_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]

我还 运行 来自 .bat 文件的 JMeter 3.3,将 jars 添加到同一个地方。我在控制台上收到此错误:

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.access0(Unknown Source)
        at java.net.URLClassLoader.run(Unknown Source)
        at java.net.URLClassLoader.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

jackson-databind 依赖项的一部分特别是 jackson-core jar,您可能丢失了它,并在您的错误中包括丢失的 class:com.fasterxml.jackson.core.Versioned

Jackson Installation:

The three JAR files (projects) in the Jackson JSON API are:

  • Jackson Core
  • Jackson Annotations
  • Jackson Databind