【问题标题】:Sonar Runner fails with exception with ruleSonar Runner 因规则异常而失败
【发布时间】:2015-06-15 02:44:03
【问题描述】:

我正在尝试在 Java 8 项目上使用 Gradle 发布到 Sonar,但该项目失败并出现以下错误:

    INFO: ------------------------------------------------------------------------
    INFO: EXECUTION FAILURE
    INFO: ------------------------------------------------------------------------
    Total time: 1:18.786s
    Final Memory: 25M/764M
    INFO: ------------------------------------------------------------------------
    ERROR: Error during Sonar runner execution
    ERROR: Unable to execute Sonar
    ERROR: Caused by: Rule 'squid:S1192' can not use 'Constant/issue' remediation function because this rule does not have a fixed remediation cost.

如果我选择我的项目以使用 FindBugs 质量配置文件,那么一切正常,统计数据会上传到声纳。但是,如果我打开 sonar way 配置文件,则会引发上述错误。

查看错误似乎找不到修复成本(我认为需要计算修复所有技术债务需要多少天)

我已尝试卸载其他插件(JavaScript/Python/等)并离开 Java。我还尝试调整技术债务设置中的默认值。我也恢复了默认配置文件。都没有效果。

我正在使用以下版本:

  • 声纳 5.0.1(应用程序)
  • sonar-runner 2.4(gradle 插件)
  • gradle 2.3
  • java 8(要分析的项目)
  • java 插件 3.1(声纳插件)

请问有人有什么想法吗?

【问题讨论】:

  • 看起来那个例外是thrown here 但我不确定你能做些什么来解决它......
  • 谢谢@tim_yates。我将研究该规则应该是什么“DebtRemediationFunction”类型并研究 effortToFix
  • 能否提供使用的java插件的版本?
  • @benzonico - 我已经更新了我的问题。谢谢
  • 你最近升级了java插件吗?从哪个版本?似乎此规则(S1192)的 Sqale 债务配置错误,因此导致您看到的问题。如果你有 sqale 插件,你可以从界面更新它。

标签: gradle sonarqube sonar-runner


【解决方案1】:

通过执行以下操作,我设法让 4 个有问题的规则发挥作用:

第一个表格显示了全新安装的数据库状态

╔═════════════╦════════════════════════════╦══════════════════════╗
║ PLUGIN_NAME ║      PLUGIN_RULE_KEY       ║ REMEDIATION_FUNCTION ║
╠═════════════╬════════════════════════════╬══════════════════════╣
║ squid       ║ MethodCyclomaticComplexity ║ (null)               ║
║ squid       ║ S1067                      ║ (null)               ║
║ squid       ║ S1192                      ║ (null)               ║
║ squid       ║ S135                       ║ (null)               ║
╚═════════════╩════════════════════════════╩══════════════════════╝

此表显示了从全新安装指向克隆数据库并运行 /setup URL 的数据库状态。

注意:这仍然是全新安装并位于新目录中,因此 /es 目录将不存在 Step 3 followed here

╔═════════════╦════════════════════════════╦══════════════════════╗
║ PLUGIN_NAME ║      PLUGIN_RULE_KEY       ║ REMEDIATION_FUNCTION ║
╠═════════════╬════════════════════════════╬══════════════════════╣
║ squid       ║ MethodCyclomaticComplexity ║ CONSTANT_ISSUE       ║
║ squid       ║ S1067                      ║ CONSTANT_ISSUE       ║
║ squid       ║ S1192                      ║ CONSTANT_ISSUE       ║
║ squid       ║ S135                       ║ CONSTANT_ISSUE       ║
╚═════════════╩════════════════════════════╩══════════════════════╝

为了解决这个问题,我将REMEDIATION_FUNCTION 中的值设置回null,现在规则可以工作了。

update rules
set remediation_function = null
where plugin_name = 'squid'
and plugin_rule_key in ('MethodCyclomaticComplexity', 'S1192', 'S135', 'S1067')

【讨论】:

  • 好收获!事实上,当来自 SonarQube 版本 jira.codehaus.org/browse/SONAR-5335的描述中描述的步骤进行操作
【解决方案2】:

从 SonarQube 4.3 或更早版本升级时,必须重置规则的技术债务定义:

没有 SQALE 插件:

  • 执行 SQL 查询:“UPDATE rules SET characteristic_id=NULL, remediation_function=NULL, remediation_coeff=NULL, remediation_offset=NULL WHERE characteristic_id IS NOT NULL;”
  • 删除 data/es 文件夹(如果存在)
  • 重新启动服务器。

使用 SQALE 插件:

  • 转到更新中心并安装 SQALE 插件(如果尚未安装)
  • 转到“备份模型”页面(设置 -> SQALE -> 备份/恢复)
  • 在“恢复模型”部分,单击“恢复”按钮 -> 您的质量模型将被重置,所有被覆盖的规则技术债务定义都将被重置。
  • 转到更新中心并卸载 SQALE 插件(如果之前未安装)。

这张票 https://jira.codehaus.org/browse/SONAR-5056 是此所需更改的来源。

【讨论】:

    【解决方案3】:

    从版本 4.2 更新到 4.5.4 后,我遇到了同样的问题。为了继续我的项目分析,我必须停用以下规则:

    • squid:MethodCyclomaticComplexity
    • 鱿鱼:S1192
    • 鱿鱼:S135

    它们都抛出“无法使用'Constant/issue'补救功能,因为此规则没有固定的补救成本”错误。

    我的安装使用 Java 8、sonar-runner 2.4 和以下插件:

    • sonar-checkstyle-plugin-2.2.jar
    • sonar-findbugs-plugin-3.2.jar
    • sonar-java-plugin-3.1.jar
    • sonar-javascript-plugin-2.4.jar
    • sonar-ldap-plugin-1.4.jar
    • sonar-scm-activity-plugin-1.8.jar

    【讨论】:

    • 嗨@mberkan - 我已停用上述规则(加上 S1067)以获取发布统计信息。然而,这不是正确的做法。这些规则是有效的规则,如果禁用它们,我会错过真正的违规行为:-(
    • 你说得对,但这只是我发现通过分析的一种方式。最后,正如您上面提到的,我们必须设置新的 Sonar 副本,但我们将丢失所有历史信息。我希望有人找到更好的解决方案。
    • 升级前是否删除了data/es文件夹?
    • 我没有检查它,但我认为如果它是全新安装,那么它不应该存在......
    猜你喜欢
    • 1970-01-01
    • 2014-04-13
    • 2021-03-22
    • 2013-08-09
    • 2019-10-05
    • 1970-01-01
    • 2015-05-10
    • 2020-05-09
    • 1970-01-01
    相关资源
    最近更新 更多