【问题标题】:Jmeter cant read custom JAR depedenciesJmeter 无法读取自定义 JAR 依赖项
【发布时间】:2019-11-20 19:36:44
【问题描述】:

我编写了一个 Maven 应用程序,我想在我的 Jmeter BeanShell 脚本中使用它。 Maven 应用程序使用 Google Guice 4.2.2 进行依赖注入,并在最后调用 API(代码需要在调用 API 之前执行一些其他操作,这就是我不使用 JMeter 插件的原因)。我正在使用maven-shade-plugin 创建uber JAR(Fat JAR)。当我从命令行运行 Jar 时,应用程序运行成功!

但是,当我在 Jmeter 测试计划中加载 JAR 并在 Jmeter BeanShell 中调用我的应用程序主方法时,我收到以下错误:

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
    at com.google.inject.Key.ensureRetainedAtRuntime(Key.java:341) ~[load-testing.jar:?]
    .
    .
    .

现在很多其他线程都提到这可能是因为旧的 Google Guava 版本(20.x 旧)但是从依赖关系树中我看到 Guava 版本是 25.1-android 并且我可以从命令行成功运行我的 JAR !!

另外,我通过运行 jar -tf 命令列出了 Uber JAR 中的类,我可以看到 com.google.common.base.Preconditions 类在那里。

如果有人能对这个问题有所了解并帮助我解决这个问题,我将不胜感激?

【问题讨论】:

  • 我想我找到了问题所在。我认为我的 Guava 与 Jmeter Guava 版本冲突。我刚刚下载了 ApacheJmeter_core v5.1.1 并观察到它正在利用通常会导致此异常的 guava 版本 17.0。 Guava 版本通常应该是 20.0.x >

标签: maven jmeter guava guice


【解决方案1】:

您的 fat-jar 似乎包含多个版本的 Guava(可能是由 shade-plugin 引起的)。

确保通过在每个 Maven 模块中使用 Maven 依赖管理将其锁定为单个版本。 (https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management)

【讨论】:

  • 我不确定,因为当我从终端运行 JAR 时,它是成功的。我执行的另一个测试是在一个简单的 Maven 应用程序中放置一个 jar 并调用我的主类,这也成功了
【解决方案2】:

可能是Beanshell本身有问题,since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting,原因在:

  • Groovy 是一种更“现代”的语言,它支持所有现代 Java 功能,而使用 Beanshell,您会被困在 Java 1.5 language level(没有 lambda、没有泛型、没有多重捕获等)
  • 与 Beanshell 相比,Groovy 的性能要好得多,因为 Grooovy 引擎实现了Compilable 接口,并且能够缓存已编译的脚本,从而提供非常接近原生 Java 代码的性能
  • Groovy 在标准 Java SDK 之上提供 a lot of enhancements

查看Apache Groovy - Why and How You Should Use It 文章了解更多详情。

【讨论】:

  • 感谢您的信息,我已经使用 JSR233 和 Groovy 2.4.16 对此进行了测试,但是同样的问题正在发生
【解决方案3】:

我终于确认了我的评论。问题是我的 JAR Guava 版本与 Jmeter Guava 版本(即 17.0)冲突,并且 Jmeter 出于某种原因正在选择自己的 Guava 版本,在将 Guice 版本降级到不依赖于番石榴的 3.0 之后,我成功运行了我的JAR 通过 Jmeter。

为什么 Jmeter 用自己的 JAR Guava 版本覆盖我的 JAR Guava 版本仍然是个谜。我将使用 Jmeter 创建一张票,以了解更多关于这个谜团的信息,但这个更改解决了我的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2013-09-25
    • 2020-03-23
    • 2020-01-30
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多