错误:Attempt to resolve method: [XXX方法] on undefined variable or class name: [XXX类]的解决(IDEA打包jar问题)
问题:
使用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问题)的更多相关文章
- VB 错误日志:MSForms.CommandButton 不是一个已加载的控件类等解决方法
是由于缺少了fm20.dll这个必要组件 网上找到 然后在工程中引用 找到路径 完美解决
- Qt错误:类中使用Q_OBJECT宏导致undefined reference to vtable for "xxx::xxx"错误的原因和解决方法
在进行Qt编程的时候,有时候会将类的定义和实现都写在源文件中,如果同时在该类中使用信号/槽,那么可能就会遇到 undefined reference to vtable for "xxx:: ...
- 现有语言不支持XXX方法
史上最强大的IDE也会有bug的时候哈,今天遇到这个问题特别郁闷,百度了下,果然也有人遇到过这个问题 解决方法: 1.调用的时候参数和接口声明的参数不一致(检查修改) 2.继承接口中残留一个废弃的方法 ...
- 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 ...
- SVN各种错误提示产生原因及处理方法大全(转)
SVN各种错误提示产生原因及处理方法大全 1. svn: Server sent unexpected return value (500 Internal Server Error) in resp ...
- attempt to call method 'getDataString' (a nil value)
错误: LUA ERROR: [: attempt to call method 'getDataString' (a nil value) 在合并cocos和quick的时候,在EventCusto ...
- SVN各种错误提示产生原因及处理方法大全
SVN各种错误提示产生原因及处理方法大全 SVN各种错误提示产生原因及处理方法大全 1. svn: Server sent unexpected return value (500 Internal ...
- okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数
如标题所示,okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数,有遇到这样现象的朋友吗? 原因:因使用的是 ...
- SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法
最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@Respon ...
随机推荐
- SpringBoot图文教程14—SpringBoot集成EasyExcel「上」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- js的立即执行函数
立即执行函数:常用于第三方库,好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),一般想到的方法就是使用立即执行函数.jQuery就是使用的立即执行函数. 函数 ...
- Numpy之数据保存与读取
在pandas使用的25个技巧中介绍了几个常用的Pandas的使用技巧,不少技巧在机器学习和深度学习方面很有用处.本文将会介绍Numpy在数据保存和读取方面的内容,这些在机器学习和深度学习方向也大 ...
- 第一个爬虫经历----豆瓣电影top250(经典案例)
因为要学习数据分析,需要从网上爬取数据,所以开始学习爬虫,使用python进行爬虫,有好几种模拟发送请求的方法,最基础的是使用urllib.request模块(python自带,无需再下载),第二是r ...
- MATLAB神经网络(6) PID神经元网络解耦控制算法——多变量系统控制
6.1 案例背景 6.1.1 PID神经元网络结构 PID神经元网络从结构上可以分为输入层.隐含层和输出层三层,$n$个控制量的PID神经元网络包含$n$个并列的相同子网络,各个子网络间既相互独立,又 ...
- 前端要了解的seo
一.搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果.深究其背后的故事,搜索引擎做了很多事情. 在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关 ...
- 第一个android App, hello world
自以为按照教程很快就会创建自己第一个android App,没想到还是用了很长时间,中间走了很多坑,记下来,这也算自己的一个成长吧 首先按照官方的教程,新建一个工程 https://developer ...
- Angular入门之环境搭建(VS code)(转载)
安装Visual Studio Code VS code和我们常用的VS压根不是一回事,它只是一个开源的轻量级编辑器,而不是IDE,因为支持typescript语法,且插件功能丰富,所以选择 官网下载 ...
- 关于Idea中不能使用Scanner在console
遇到了麻烦,在Idea中使用@Test运行程序时,scanner在控制台无法输入,然后来回折腾... 创建了一个新的类里面含有main方法,可以完美运行scanner: 重新回来,发现还是不行, 创建 ...
- Java-用集合存储对象(新手)
//导入的包.import java.util.ArrayList;//用集合存储对象,遍历集合,取所有元素. 用get方法.//创建的一个类.public class zylx4 { //公共静态的 ...