问题:

  使用JMeter调用jar包的时候,报错误信息Typed variable declaration : Attempt to resolve method:[XXX方法] on undefined variable or class name: [XXX类]。意思是XXX类中没有找到定义的XXX方法。

  这看着是一个JMeter的使用jar问题,但事实上是IDEA的jar打包问题!

解决思路:

通常的解决方法:

1、确认是否引入jar包。在测试计划 → Add directory or jar to classpath 中引入jar包。

2、确认是否引入对应的类。在BeanShell PreProcessor → Script 的开头写对应的import,如import com.demo.XXX;。

3、确认引用的类名、方法名是否正确。

  仔细看了一遍引用的包、类名、方法名,都没问题。开始怀疑是打包的jar有问题,我是用IDEA打的包叫Des,为了区分,之前用MyEclipse比较多,于是用MyEclipse重新打了个包叫DesUtil,神奇的事情发生了,JMeter引用后发现没有问题!!!

  于是,本着技术宅的执着,开始对比两个jar包,研究了好久,才发现其中的两个奥秘(两个深坑)!首先用反编译工具打开jar包,其实之前我调不通的时候我也打开jar包看过,发现目录结构并没有问题,这样看确实是一模一样的,如图:

IDEA打包的

====================我是分割线====================

MyEclipse打包的

  这里其实有第一个坑,很平常的目录结构,看着是一样。而事实上,这两个包的目录结构是不一样的。我们解压两个jar看他的目录。

IDEA打包的

====================我是分割线====================

MyEclipse打包的

  发现没有,两个目录层级其实是不一样的,IDEA打包的文件夹叫“com.demo”,明显是有问题的,并没有层级关系。然而这个差异,在反编译工具里是看不出来的,可以对比前面反编译工具里的2张图。

  那么新的问题来了,为啥IDEA打包的文件夹会变成“com.demo”呢?仔细研究发现,是导出jar的配置有问题,MyEclipse导出jar包时,路径是不需要我们创建的,而IDEA的jar包路径是要我们手动创建的。这时候第二个坑就来了!首先IDEA中,如果要建两层包的结构是可以直接用“com.demo”这样的方式命名包的,会出现两层结构,如图:

创建包:

文件夹显示:

项目工程中显示:

  可以看到,当文件夹没有其他文件时,项目工程里就是这么显示的。但是!导出jar的时候是不能以这种方式命名包的,即使包下面没有其他文件了。如果用这样的方式,就会出现刚的问题,文件夹名称变成了“com.demo”。两种命名方式,包的层级结构是不一样的,如下图两个红框所示:

解决方法:

  所以正确的方式是,按如下建立目录结构,然后导出jar包。问题解决!

PS:主要是项目中和反编译工具中,包的层级显示,容易让人产生误解。(其实是告诉我们建包时不要偷懒,哈哈哈)。

错误:Attempt to resolve method: [XXX方法] on undefined variable or class name: [XXX类]的解决(IDEA打包jar问题)的更多相关文章

  1. VB 错误日志:MSForms.CommandButton 不是一个已加载的控件类等解决方法

    是由于缺少了fm20.dll这个必要组件 网上找到 然后在工程中引用 找到路径 完美解决

  2. Qt错误:类中使用Q_OBJECT宏导致undefined reference to vtable for "xxx::xxx"错误的原因和解决方法

    在进行Qt编程的时候,有时候会将类的定义和实现都写在源文件中,如果同时在该类中使用信号/槽,那么可能就会遇到 undefined reference to vtable for "xxx:: ...

  3. 现有语言不支持XXX方法

    史上最强大的IDE也会有bug的时候哈,今天遇到这个问题特别郁闷,百度了下,果然也有人遇到过这个问题 解决方法: 1.调用的时候参数和接口声明的参数不一致(检查修改) 2.继承接口中残留一个废弃的方法 ...

  4. Android NDK 【错误】The method loadLibrary(String) is undefined for the type Settings.Syste

    [错误]The method loadLibrary(String) is undefined for the type Settings.System [解决方法] 不要加入包import andr ...

  5. SVN各种错误提示产生原因及处理方法大全(转)

    SVN各种错误提示产生原因及处理方法大全 1. svn: Server sent unexpected return value (500 Internal Server Error) in resp ...

  6. attempt to call method 'getDataString' (a nil value)

    错误: LUA ERROR: [: attempt to call method 'getDataString' (a nil value) 在合并cocos和quick的时候,在EventCusto ...

  7. SVN各种错误提示产生原因及处理方法大全

    SVN各种错误提示产生原因及处理方法大全 SVN各种错误提示产生原因及处理方法大全 1. svn: Server sent unexpected return value (500 Internal ...

  8. okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数

    如标题所示,okhttp封装时,提示 cannot resolve method  OkHttpClient setConnectTimeout() 函数,有遇到这样现象的朋友吗? 原因:因使用的是 ...

  9. SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

    最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@Respon ...

随机推荐

  1. 如何学习kafka?

      本文是我学习kafka的一个思路和总结,希望对刚接触kafka的你有所帮助.在学习kafka之前,最好能对kafka有一个简单的了解,可以提出一些问题,带着问题去学习,就会容易一些. 0 什么是k ...

  2. Visual Studio 安装中出现闪退

    问题描述:win7 系统下, 安装 Visual Studio Community 2017 过程中,安装界面闪退 原因:Visual Studio 的版本低了 解决方案:选择 Visual Stud ...

  3. 建议8:恰当选用if和switch

    相对来说下面几种情况更适合switch结构 枚举表达式的值.这种枚举是可以期望的,平行逻辑关系的 表达式的值具有离散性,不具有线性的非连续的区间值 表达式的值是固定的,不是动态变化的 表达式的值是有限 ...

  4. 异步编程RxJava-介绍

    前言前段时间写了一篇对协程的一些理解,里面提到了不管是协程还是callback,本质上其实提供的是一种异步无阻塞的编程模式:并且介绍了java中对异步无阻赛这种编程模式的支持,主要提到了Future和 ...

  5. 使用docker构建hadoop集群

    docker的使用越来越普遍了,大家不知道docker的还需要进一步学习一下.这次咱们使用docker去进行hadoop集群的构建. 使用docker构建的好处真的很多,一台电脑上可以学习安装很多想做 ...

  6. Consider defining a bean named 'authenticator' in your configuration.

    SpringBoot整合Shiro时出错: 异常日志: o.s.b.d.LoggingFailureAnalysisReporter: *************************** APPL ...

  7. 为什么我推荐你用Ubuntu开发?

    前言: 鱼哥在做多媒体开发时,领导倒逼我们用Ubuntu开发,后来才发现它的牛逼和高效.所以对于还在用Windows上开发的朋友,鱼哥建议,趁周末,搞个双系统,切到Ubuntu上开发, Ubuntu最 ...

  8. NodeMCU入坑指南-烧写固件并连接WIFI

    写在前面 今天入手了一个NodeMCU的板子,准备学习一下物联网相关的知识.不过由于博主学艺不精,在第一步烧写固件上就踩坑了,所以就想着把自己的踩坑经历写出来分享给大家,希望能有一些帮助~ 材料准备 ...

  9. JDK下载、安装、卸载

    学习java的朋友,第一课就是安装JDK,如果你连他都不会安装,那就非常尴尬,如果面试的时候如果问到这个问题,就Game over了,下面来看看怎么弄吧! 了解JDK JDK的全称是JavaSE De ...

  10. html5 window.postMessage 传递数据的使用

    window.postMessage(图片介绍): 发送方(图片介绍): 接收方(图片介绍): 个人测试一(iframe): 发送方,地址为:http://localhost:63342/HelloH ...