【问题标题】:JMeter: NoClassDefFoundError error when used jackson jarJMeter:使用jackson jar时出现NoClassDefFoundError错误
【发布时间】:2018-04-11 12:46:38
【问题描述】:

我正在 JMeter 中创建一个自定义 Java 采样器。它工作得很好。但是,当我希望它以 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.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

【问题讨论】:

    标签: java jmeter noclassdeffounderror jackson-databind


    【解决方案1】:

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

    Jackson Installation:

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

    • 杰克逊核心
    • 杰克逊注解
    • 杰克逊数据绑定

    【讨论】:

    • 好点。我之前不知道我需要检查该页面上的编译依赖项。但不幸的是,这也无济于事(我添加了 jar,然后在运行 JMeter 之前重新启动了 Eclipse)。
    • 我上次检查时,jackson-annotations 不在 Eclipse 项目的构建路径中。现在我将它添加到构建路径中,终于可以使用了!但我认为这不会有什么不同,因为无论如何 jar 都是从程序内部读取的。你知道为什么会这样吗?
    • @GregT 你在异常杰克逊数据绑定中看到尝试使用反射加载在其依赖项 jar 中找到的类
    • 如果我在 Maven 项目中使用 JMeter 会有所帮助,但可惜只有 Java Sampler 是(而且我编辑了错误的 POM)。
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多