【问题标题】:SonarQube analysis fails after upgrade to 3.7.1 rules升级到 3.7.1 规则后 SonarQube 分析失败
【发布时间】:2023-03-26 17:46:01
【问题描述】:

使用 SonarQube 5.2 - 只是昨天下载并在 Windows 下运行的“点击即走”发行版。没什么特别的。

将“Java”规则包从捆绑的 3.6 版本升级到 3.7.1 后,sonar runner 在分析过程中失败。

使用“-e”选项运行时会显示很长的堆栈跟踪,但是没有详细说明文件中失败的位置(行号、方法)或哪个规则失败。

我已将堆栈跟踪缩减为我认为有用的部分:

ERROR: Error during Sonar runner execution
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
...
Caused by: org.sonar.squidbridge.api.AnalysisException: SonarQube is unable to analyze file : 'C:\Users\robert.rusk\Documents\cvs\ip_probe\src\com\robert\splat\MyClass.java'
...
Caused by: java.lang.IndexOutOfBoundsException: index (1) must be less than size (1)
...
        at org.sonar.java.checks.PrintfCheck.verifyParameters(PrintfCheck.java:173)
        at org.sonar.java.checks.PrintfCheck.onMethodInvocationFound(PrintfCheck.java:112)
...

【问题讨论】:

    标签: sonarqube


    【解决方案1】:

    您遇到以下问题:https://jira.sonarsource.com/browse/SONARJAVA-1369 当您在 printf 检查期间有一个带有 %< 的参数时会发生这种情况(规则 squid:S2275)。​​

    问题已解决(几分钟前记录在案;))并且应该是未来几天内必然会发生的下一个版本的一部分。

    【讨论】:

    • 谢谢 :) 我认为如果提供更多关于故障发生位置的上下文,则此类故障会更容易管理。是否有一张票可以在失败时添加此类信息?目前只是文件名...
    • 这些失败是意料之外的问题,因此在文件分析过程中很难准确确定问题发生的时间点。
    • 是的,我将其描述为“可用性”标题下的“新功能”:-)
    • 问题是它并非在所有情况下都可行。一个太大的努力最终会弄乱代码以获得小的附加值。 (并不是说可用性没有价值,而是这样一个功能的投资回报率真的很低)。
    • 另外值得注意的是@SuppressWarnings("squid:S2275") 不会禁止执行此错误规则。
    【解决方案2】:

    经过一番调查,我现在认为发生错误是因为在没有足够参数(应该是 2)的情况下调用了 String.format,当我注释掉这一行时,分析就会运行而没有任何问题。

    splatDateStr = String.format("%tFT%<tRZ", splatDate);
    

    我猜这是堆栈跟踪中提到的PrintfCheck

    【讨论】:

    • 查看 String.format 的文档我发现参数的数量是正确的。正如@benzonico 所说,这与%&lt; 的解释方式有关,这意味着它应该再次使用相同的参数。
    猜你喜欢
    • 1970-01-01
    • 2018-06-25
    • 2015-07-06
    • 2015-05-08
    • 2016-02-06
    • 1970-01-01
    • 2015-07-06
    • 2016-09-15
    • 2013-12-25
    相关资源
    最近更新 更多