【发布时间】: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 >