本地導出不報錯,發布到測試環境,點導出報異常:Method not found: get$jacocoData is$jacocoData
日志:
[2020-04-15 20:41:50.912][default task-24][DEBUG]- getMethodName:get$jacocoData
[2020-04-15 20:41:50.913][default task-24][ERROR] - Excel文件創建異常
java.lang.NoSuchMethodException: com.RecordExportBO.get$jacocoData()
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at com.util.excel.ExcelWriter.writeData(ExcelWriter.java:131)
經分析,是因為excel導出的時候,通過反射獲取類的字段
Field[] fields = t.getClass().getDeclaredFields();
通過打印日志發現反射獲取的字段多了一個jacocoData。
是由於,項目發布前需要進行新增代碼覆蓋率檢查,增加了jacoco來統計代碼覆蓋率,通過編譯期間加上了統計字段jacocoData
而這個字段沒有getset方法 所以導致報錯
可以通過 .isSynthetic()判斷,來剔除不是原生的字段
if (field.isSynthetic()) {
continue;
}