NoSuchMethodException get$jacocoData()
异常描述
本地环境,生产环境都没问题,只有测试环境发现问题。
java.lang.NoSuchMethodException: [对象] get$jacocoData()
异常分析
测试环境加了jacoco代码覆盖率的功能,该异常说明在代打运行时找不到该方法,实际该对象中并没有此方法,原因是有地方通过反射获取[对象]中的方法时,没找到get$jacocoData()方法。
解决方法
1.去掉代码覆盖率工具jacoco,启动的时候去掉参数
2.在反射获取方法的地方去掉jacoco合成方法get$jacocoData()
/**
* 判断是否对象所有属性都为null, 或空字符串(继承的属性不考虑在内)
* @param obj
* @return
* @throws IllegalAccessException
*/
public static boolean isAllPropEmpty(Object obj) throws IllegalAccessException {
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {
//针对某些情况,编译器会引入一些字段,需要过滤掉
if (declaredField.isSynthetic()){
continue;
}
declaredField.setAccessible(true);
Object value = declaredField.get(obj);
if (value != null){
if (! (value instanceof String)){
return false;
}else if(!((String) value).matches("^\\s*$")){
return false;
}
}
}
return true;
}
参考
https://www.jianshu.com/p/1e0c3713aaed
https://blog.csdn.net/lingyiwin/article/details/98771136