【问题描述】
使用 findbugs 扫描 java web 代码,为了方便,直接复用之前 android 项目的配置文件。
扫描时却提示:java.io.IOException: No files to analyze could be opened
使用的 findbugs task 如下:
apply plugin: 'findbugs' findbugs { toolVersion = '3.0.1' ignoreFailures = true } task findbugs(type: FindBugs) { effort = "max" reportLevel = "high" source = fileTree('src/main/java/') classes = files("$project.buildDir/intermediates/classes") classpath = files() excludeFilter = new File("${project.rootDir}/findbugs-filter.xml") reports { xml.enabled = true xml { destination "$project.buildDir/reports/findbugs/findbugs.xml" } } }
【原因分析】
按提示的意思,是没有文件可以分析,而 findbugs 分析的是 class 文件,所以就从 classes 配置来找原因。发现 java 和 android 构建后的目录结构是不一样的(红色的文件夹):
classes = files("$project.buildDir/intermediates/classes") ----- android
classes = files("$project.buildDir/classes") ----- java
【解决方法】
修改 classes 参数值,分开两个配置文件,按工程分别部署 android 项目和 java 项目
【补充另外一种场景】
classes 路径配置没有问题,可是依然提示 No files to analyze could be opened。那就需要从执行的命令下手:
请记住:gradle build findbugs 和 gradle build && gradle findbugs 是不一样的。
前者是一条命令,会在每个子模块编译后即执行 findbugs,后者是两条命令,会在整个工程都编译后才执行 findbugs。
所以结果不言而喻,前者很容易会碰到提示 classes 找不到的异常。拆分开两条命令即可,或者,也可以改代码:)