[07:43:57]W:[步骤 1/1] 错误:SonarQube 扫描仪执行期间出错
[07:43:57]W:[步骤 1/1] 错误:第 523 行超出文件范围 src/main/java/com/company/package/File.java (行数:522)
由于某种原因,Sonarqube 在第 523 行报告错误,但源文件中只有 522 行?
我在以前的文件中看到了这个,但是当我在它的末尾添加一个空行时,问题就消失了,这个文件的末尾已经有一个空行。
我在使用sonar maven插件和jacoco测试报告时遇到了同样的问题。
mvn sonar:sonar
依赖于existintig jacoco报告,当源代码更改(行已被删除),但测试报告未更新时,会发生此错误。运行mvn clean test sonar:sonar
解决了它。
我尝试了
gradle clean build
它对我有用
同样该死的问题也发生在 python 代码中。我解决了在文件末尾添加一个空行的问题。
对我来说,这是因为我在两个不同的子模块(maven)中具有完全相同的类(例如
com.test.MyClass
)名称和包名称,第一个模块中的MyClass
更大,即120行代码。第二个模块中的MyClass
较短,然后自 JaCoCo 以来抛出异常,尽管报告是针对此的。
解决方案是重命名其中一个类或将其移动到另一个包中。
即:
com.test.MyClass
和
com.test.MyClassB
或:
com.test.MyClass
和
com.test.foo.MyClass
我们的 AspNET-Core-Project 也遇到了同样的问题。
然后我们看到,我们的测试失败了,不幸的是,这些失败并没有导致我们的 Jenkins-Job 失败。相反,声纳分析测试和覆盖范围会产生错误。
一旦修复了测试,一切就恢复正常了。
如果执行 maven clean 不起作用,请检查是否有任何需要清理的旧项目文件夹。一旦你从 maven pom 中删除了一个子模块,它就不会删除包含 /target 目录和很久以前的 jacoco 报告的文件夹。
就我而言,用 Swift 编写的 iOS 项目必须删除以前的报告。 只需删除 sonar-reports 文件夹即可。
我在使用 Azure DevOps Pipelines 时遇到了同样的错误,但在构建
sources and output
的解决方案之前进行了清理,完成了这项工作。
现在一切又恢复正常了。
出现此问题的主要原因:-
对于前- docker run -dt --name ${{variables.containerName}} ${{variables.tempimage}} /bin/bash
在上面的命令中,我们调用容器名称,然后 使用一些临时图像,所以如果这个临时图像被更新(意味着指向 到最新的存储库)那么只有您才能解决此问题 如果 sonarqube 的存储库和 yaml 文件中存在不匹配的情况 然后我们就会遇到这个问题。
要获取最新的镜像,我们可以在里面使用 Team_image_builder yaml 文件,如果我们从存储库中删除最新提交的文件,那么这个问题 不会来,因为那时双方的差异将为零。
再次运行之前删除上次运行的覆盖率报告。
为了避免覆盖率报告出现问题,请确保在再次执行之前将其删除。首先,构建 xml 文件,然后执行 sonar-scanner。为此,请按顺序运行以下命令:coverage xml、coverage html 和 sonar-scanner。或者,您可以尝试删除 .coverage 和 .scannerwork 文件。