如何设置Sonarqube Scala代码覆盖率指标?

如何解决如何设置Sonarqube Scala代码覆盖率指标?

我们正在尝试使用gradle获取Sonarqube中Scala的代码覆盖范围:

classpath "gradle.plugin.org.scoverage:gradle-scoverage:3.1.5"
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1"

我们正在实现我们的build.gradle:

buildscript {
    repositories {
        maven {
            url <maven_endpoint>
            allowInsecureProtocol true
        }
    }
    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.3.0.RELEASE'
        classpath "io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE"
        classpath "com.palantir.gradle.docker:gradle-docker:0.25.0"
        classpath "gradle.plugin.org.scoverage:gradle-scoverage:3.1.5"
        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1"
    }
}

allprojects {
    apply plugin: 'idea'
    apply plugin: 'org.sonarqube'

    idea {
        module {
            downloadJavadoc = false
            downloadSources = true
        }
    }
}

def allTestCoverageFile = "${project.buildDir}/jacoco/test.exec"

sonarqube {
    properties {
        property "sonar.sourceEncoding","UTF-8"
        property "sonar.sources","${projectDir}/src/main/scala/"
        property "sonar.tests","${projectDir}/src/test/scala/"
        property "sonar.jacoco.reportPath","${project.buildDir}/jacoco/"
        property "sonar.scala.version","$scala_2_12_version"
        property "sonar.scala.coverage.disable","false"
        property "sonar.scala.scalastyle.disable","false"
        property "sonar.scala.scoverage.reportPath","${project.buildDir}/scala/scoverage-report/scoverage.xml"
        property "sonar.scala.scapegoat.reportPath","${project.buildDir}/scala/scapegoat-report/scapegoat.xml"
        property "sonar.scala.scapegoat.disable","false"
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'scala'
    apply plugin: 'idea'
    apply plugin: 'maven-publish'
    apply plugin: 'org.sonarqube'
    apply plugin: 'jacoco'
    jacoco { toolVersion = "0.8.5" }

    sonarqube {
        properties {
            property "sonar.sources","src"
            property "sonar.jacoco.reportPaths",allTestCoverageFile
        }
    }

    description = 'Notification Service'

    java {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
        withSourcesJar()
    }

    repositories {

        mavenLocal()

        maven {
            url <maven_endpoint>
            allowInsecureProtocol true
        }
        maven {
            url <maven_endpoint>
            allowInsecureProtocol true
        }
        maven {
            url <maven_endpoint>
            allowInsecureProtocol true
        }
    }

    dependencies {
        implementation "org.scala-lang:scala-library:$scala_2_12_version"

        testImplementation ("org.mockito:mockito-core") {version {strictly "2.15.0"}}
        testImplementation "org.scalatestplus:scalatestplus-junit_2.12:1.0.0-M2"
    }

    test {
        exclude '**/*ISpec.class'
        testLogging {
            showStandardStreams = true
            exceptionFormat = 'full'
            events 'started','passed','skipped','Failed'
        }
    }

    publishing {
        publications {
            mavenJava(MavenPublication) {
                from components.java
            }
        }
        repositories {

            maven {
                name "applications"
                def releasesUrl = <releases endpoint>
                def snapshotsUrl = <snapshots endpoint>
                url = version.endsWith('SNAPSHOT') ? snapshotsUrl : releasesUrl
                allowInsecureProtocol true
                credentials {
                    username 
                    password 
                }
            }

        }
    }

    task combineReports(type:JacocoReport) {
        sourceDirectories.setFrom filetree("${projectDir}/src/main/scala/")
        classDirectories.setFrom filetree("${buildDir}/classes/scala/main/")
        executionData.setFrom "${buildDir}/jacoco/integrationTest.exec","${buildDir}/jacoco/test.exec"
        additionalSourceDirs.setFrom files(sourceSets.main.allJava.srcDirs)
        reports {
            html.enabled true
            html.destination file("${buildDir}/combinedTestHtml")
            xml.enabled false
            csv.enabled false
            sourceSets sourceSets.main
        }
    }

    task integrationReport(type: JacocoReport) {
        sourceDirectories.setFrom filetree("${projectDir}/src/main/scala/")
        classDirectories.setFrom filetree("${buildDir}/classes/scala/main/")
        executionData.setFrom "${buildDir}/jacoco/integrationTest.exec"
        additionalSourceDirs.setFrom files(sourceSets.main.allJava.srcDirs)
        reports {
            html.enabled true
            html.destination file("${buildDir}/jacocoIntegrationTestHtml")
            xml.enabled false
            csv.enabled false
            sourceSets sourceSets.main
        }
        def unitTestExec = file "${buildDir}/jacoco/test.exec"
        if (unitTestExec.exists()) {
            finalizedBy combineReports
        }
    }

    task dependencyTree(type: DependencyReportTask)
}

task updateVersion {
    doLast {
        Properties props = new Properties()
        File propsFile = new File("gradle.properties")
        props.load(propsFile.newDataInputStream())
        props.setProperty("version","$version")
        props.store(propsFile.newWriter(),null)
        props.load(propsFile.newDataInputStream())
        println "Version set to $version in gradle.properties"
    }
}

使用gradle构建后,它不仅在Sonarqube中显示0%的代码覆盖率,而且之后也不会创建scapegoat.xml和scoverage.xml。我需要更改什么才能解决此问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?