错误: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 ...
随机推荐
- django 博客搭建
comment1.安装django pip install django 2.创建项目 django-admin startproject mysite 3.在mysite文件夹下创建app pyth ...
- 组件/ 外层数据初始化时候,不应该触发 on-change 事件
组件/ 外层数据初始化时候,不应该触发 on-change 事件 watch: { value (value) { this.noOnChange = true // 外层传值 不触发on-chang ...
- 2016 Multi-University Training Contest 4 T9
http://acm.hdu.edu.cn/showproblem.php?pid=5772 最大权闭合子图. 得到价值w[i][j]的条件是选了i,j这两个位置的字符.选择位置的i字符花费为 第一次 ...
- linux svn切换用户
1. 临时切换 在所有命令下强制加上--username 和--password选项. 例如:svn up --username zhangsan --password 123456 2.永久切换 删 ...
- 深入理解计算机系统 (CS:APP) 缓冲区漏洞实验 – Buffer Lab 解析
原文地址:https://billc.io/2019/05/csapp-cachelab/ 写在前面 这是 CSAPP 官网上的第 4 个实验 buflab,也是学校要求的第三个实验.这个实验比上一个 ...
- 【Weiss】【第03章】队列例程
前几个例程还是相当简单的,把链表即时改了一下就是队列了. 还有想了一下,决定这种例程的代码放法是:先把测试代码默认折叠放在前面,然后把实现代码默认展开放在后面. 测试代码如下: #include &l ...
- Fink SQL 实践之OVER窗口
问题场景 Flink SQL 是一种使用 SQL 语义设计的开发语言,用它解决具体业务需求是一种全新体验,类似于从过程式编程到函数式编程的转变一样,需要一个不断学习和实践的过程.在看完了 Flink ...
- 大数据软件安装之HBase(NoSQL数据库)
一.安装部署 1.Zookeeper正常部署 (见前篇博文大数据软件安装之ZooKeeper监控 ) [test@hadoop102 zookeeper-3.4.10]$ bin/zkServer.s ...
- JAVA EE,JAVA SE,JAVA ME,JDK,JRE,JVM之间的区别
JAVA EE是开发企业级应用,主要针对web开发有一套解决方案. JAVA SE是针对普通的桌面开发和小应用开发. JAVA ME是针对嵌入式设备开发,如手机. JRE是程序的运行环境 JDK是程序 ...
- HTML基本标签,表格标签,框架标签
1.html简介 1.1什么是html html全称:Hyper Text Markup Language(超文本标记语言) 备注: a.超文本:页面内可以包含图片.链接,甚至音乐 ...