JMeter: ошибка NoClassDefFoundError при использовании банки jackson

Я создаю собственный семплер Java в JMeter. Работает нормально. Однако, когда я хотел, чтобы он возвращал результат в JSON, JMeter не нашел .jar для библиотеки jackson-databind, которая необходима для создания JSON.

Я положил его в папку / lib / ext в основном каталоге JMeter. Я также скопировал в / lib, но безрезультатно. (Я знаю, что / lib / ext не следует использовать для jar-файлов зависимостей, но по моему опыту JMeter не находит мои служебные jar-файлы в / lib.)

Я попытался добавить путь к переменным search_paths, user.classpath и plugin_dependency_paths в jmeter.properties. Я пробовал использовать абсолютный путь, относительный путь, косую черту, обратную косую черту, но ничего не помогло.

Я попытался установить переменную 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]

Я также запустил JMeter 3.3 из файла .bat, добавив банки в то же место. У меня на консоли такая ошибка:

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


person GregT    schedule 11.04.2018    source источник


Ответы (1)


Часть зависимостей jackson-databind специально jackson-core jar, который вам, вероятно, не хватает, и включите отсутствующий класс в вашу ошибку: com.fasterxml.jackson.core.Versioned

См. Установка Джексона:

Три JAR-файла (проекта) в Jackson JSON API:

  • Джексон Core
  • Аннотации Джексона
  • Джексон Датабинд
person user7294900    schedule 11.04.2018
comment
Хорошая точка зрения. Раньше я не знал, что мне нужно проверить зависимости компиляции на этой странице. Но, к сожалению, это тоже не помогло (я добавил jar-файлы, а затем перезапустил Eclipse перед запуском JMeter). - person GregT; 11.04.2018
comment
Аннотации Джексона отсутствовали в пути сборки проекта Eclipse, когда я в последний раз проверял. Теперь я добавил путь сборки, и, наконец, он работает! Но я подумал, что это не имеет значения, поскольку jar все равно читается изнутри программы. Вы знаете, почему это так? - person GregT; 11.04.2018
comment
@GregT вы видите в привязке данных исключения jackson, пытающейся загрузить с помощью отражения класс, найденный в его банке зависимостей - person user7294900; 11.04.2018
comment
Было бы полезно, если бы у меня был JMeter в проекте Maven, но, увы, был только Java Sampler (и я отредактировал неправильный POM). - person GregT; 11.04.2018
comment
@GregT см. github.com/jmeter-maven -plugin / jmeter-maven-plugin / blob / master / - person user7294900; 11.04.2018