Search code examples
gradlesonarqubesonar-runner

Sonar Runner fails with exception with rule


I am trying to publish to Sonar using Gradle on a Java 8 project which is failing with the following error:

    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.

If I select my project to use the FindBugs quality profile then everything works and stats are uploaded to sonar. However if I turn on the sonar way profile the error above is thrown.

Looking at the error it seems it cannot find a remediation cost (which I think is required to work out how many days it will take to fix all tech debt)

I have tried uninstalling other plugins (JavaScript/Python/etc) and just leave Java. I have also tried tweaking the defaults in the Technical Debt settings. I have restored the default profiles also. All have had no effect.

I am using the following versions:

  • sonar 5.0.1 (application)
  • sonar-runner 2.4 (gradle plugin)
  • gradle 2.3
  • java 8 (project to analyse)
  • java plugin 3.1 (sonar plugin)

Does anyone have any ideas please?


Solution

  • I have managed to get the 4 problematic rules to work by doing the following:

    The first tables shows the state of the database from a completely fresh install

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

    This table show the state of the database from a fresh install pointing to a cloned database and running the /setup URL.

    NOTE: This is still a fresh install and in a new directory so the /es directory will not exist 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       ║
    ╚═════════════╩════════════════════════════╩══════════════════════╝
    

    To solve this I had set the values in the REMEDIATION_FUNCTION back to null and the rules now work.

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