Sonarqube 扫描错误,行超出范围?

Posted

技术标签:

【中文标题】Sonarqube 扫描错误,行超出范围?【英文标题】:Sonarqube scan error with line out of range? 【发布时间】:2017-02-06 18:17:55 【问题描述】:

[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 行?

我在以前的文件中看到过这个,但是当我在它的末尾添加一个空行时,问题就消失了,这个文件的末尾已经有一个空行。

【问题讨论】:

您使用的是哪个版本的 SonarQube 和 Java 插件? File.java 失败的编码是什么? 您好,SonarQube 5.6.2、java 插件 4.2、utf-8 编码文件遇到同样的问题 它似乎在我发布此内容后的第二天才开始工作......没有进行任何更改 这里有同样的问题。在带有 SonarQube 6.1 的 groovy 项目中使用 Maven。 我遇到了同样的问题,我通过将违规类的全部内容复制并粘贴到 TextWrangler 中,然后将其复制并粘贴回 Visual Studio 来解决它。这听起来很傻,但我在 PC 和 Mac 上的开发之间来回切换,我想我在某个时候标准化了换行符,这可能导致了问题。 【参考方案1】:

我在使用 sonar maven 插件和 jacoco 测试报告时遇到了同样的问题。 mvn sonar:sonar 依赖于一个existintig jacoco 报告,当源代码被更改(行已被删除),但测试报告没有更新这个错误发生。运行mvn clean test sonar:sonar 解决了它。

【讨论】:

是的。我遇到了同样的问题,原因也是一个过时的 jacoco 报告。【参考方案2】:

我试过gradle clean build它对我有用

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review @PankajMakwana 不同意。仅仅因为它很短并不意味着它不是一个答案。我认为这是答案,而不是评论。【参考方案3】:

同样的问题也发生在 python 代码中。我解决了在文件末尾添加一个空行。

【讨论】:

对我来说,是覆盖 xml 没有被删除的文件刷新。【参考方案4】:

对我来说,这是因为我在两个不同的子模块(maven)中有完全相同的类(例如 com.test.MyClass)名称和包名称,第一个模块中的 MyClass 更大,即 120 行代码。第二个模块中的MyClass 较短,然后自 JaCoCo 以来引发了异常,尽管报告是针对此的。

解决方案是重命名其中一个类或将其移动到不同的包中。

即: com.test.MyClasscom.test.MyClassB

或者:

com.test.MyClasscom.test.foo.MyClass

【讨论】:

【参考方案5】:

对于 Azure DevOps,您可能希望确保您的构建在开始构建之前清理源代码。

【讨论】:

【参考方案6】:

如果执行 maven clean 不起作用,请检查您是否有任何需要清理的旧项目文件夹。一旦你从 maven pom 中删除了一个子模块,它就不会删除包含 /target 目录以及很久以前的 jacoco 报告的文件夹。

【讨论】:

【参考方案7】:

就我而言,一个用 Swift 编写的 ios 项目必须删除以前的报告。 只需删除 sonar-reports 文件夹即可。

【讨论】:

【参考方案8】:

我在使用 Azure DevOps Pipelines 时遇到了同样的错误,但在为 sources and output 构建解决方案之前进行了清理工作。

现在一切都恢复正常了。

【讨论】:

你是怎么做到的?我在 Azure DevOps 管道中遇到了这个问题。【参考方案9】:

我们在 AspNET-Core-Project 上遇到了同样的问题。

然后我们看到,不幸的是,我们的测试失败并没有导致我们的 Jenkins-Job 失败。相反,sonarqube 分析测试和覆盖率产生了错误。

一旦测试得到修复,一切都会再次正常运行。

【讨论】:

【参考方案10】:

这个问题的主要原因:-

    是的,当最近更改 存储库,但您没有使用 yaml 文件中的更新图像,并且此错误将始终在存储库中最新提交的文件中看到。

对于前 - docker run -dt --name $variables.containerName $variables.tempimage /bin/bash

    在上面的命令中,我们调用了 containerName,然后 使用一些临时图像,所以如果这个临时图像被更新(意味着指向 到最新的回购)那么只有你才能解决这个问题 如果我们在 sonarqube 的 repo 和 yaml 文件中存在不匹配 那么我们就会得到这个问题。

    要获取最新的图像,我们可以在里面使用 Team_image_builder yaml 文件,如果我们从 repo 中删除最新提交的文件,那么这个问题 不会来,因为那时双方的差异为零。

【讨论】:

以上是关于Sonarqube 扫描错误,行超出范围?的主要内容,如果未能解决你的问题,请参考以下文章

Sonarqube + Jenkins:python 覆盖率报告 => 删除源中的行后行超出范围

Swift 错误:索引超出范围

索引超出范围的 SwiftUI 问题

致命错误:单击特定单元格进行 segue 时索引超出范围

一旦我超出范围并再次进入该区域,就不会扫描信标

插入行时iOS索引2超出范围错误