【问题标题】:Sonar: How do I use gradle to inspect an android project声纳:如何使用 gradle 检查 android 项目
【发布时间】:2013-12-05 17:18:07
【问题描述】:

我已经尝试了一段时间,让声纳检查和分析我的 android 项目。但到目前为止还没有运气。我试图在声纳中实现的项目是一个包含 2 个类和一些测试方法的测试项目。都塞在项目的src目录下。

这就是我到目前为止所得到的。

具有以下设置的 build.gradle 文件:

buildscript {
repositories {
    mavenCentral()
}

dependencies {
    classpath 'com.android.tools.build:gradle:0.6.+'
}
}

apply plugin: 'android'
apply plugin: 'sonar'
apply plugin: "sonar-runner"

android {  

buildToolsVersion "18.0.1"
compileSdkVersion 18

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 16
}

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['com.example.GradleAndroidTest']
        resources.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }
    instrumentTest.setRoot('test')
}


}

sonar {
server {
    url = "http://sonar.someserver.int"
}
database {
    url = "jdbc:mysql://sonar.someserver.int:3306/sonar"
    driverClassName = "com.mysql.jdbc.Driver"
    username = "*****"
    password = "*****"
}
}

sonarRunner {
sonarProperties {
    property "sonar.host.url", "http://sonar.someserver.int"
    property "sonar.jdbc.url", "jdbc:mysql://sonar.someserver.int:3306/sonar"
    property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver"
    property "sonar.jdbc.username", "*****"
    property "sonar.jdbc.password", "*****"
}
}

为了测试这个项目,我在命令提示符下进入项目的根目录并输入:

gradle sonarRunner

在此之后,该项目显示在 sonarQube 上,但没有显示统计数据。没有代码行,什么都没有。我的问题是。我是不是忘记了什么?难道我做错了什么。

我在 gradle 和 sonar 方面没有太多经验,所以现在我向有经验的人寻求帮助。希望你能帮忙!

【问题讨论】:

    标签: java android gradle sonarqube


    【解决方案1】:

    我认为一个问题是Android插件目前使用自己的源集模型。 sonarRunner 插件不知道该模型,因此无法像通常那样预先配置东西。但是,您应该能够通过显式配置必要的 Sonar 属性自己提供这些信息。

    要了解sonarRunner 插件预配置了哪些声纳属性,请查看GroovydocSonarRunnerPlugin 类。 Sonar 网站上提供了所有现有 Sonar 属性的列表。

    PS:您应该只应用sonarsonarRunner 插件之一。我建议使用后者(前者的继承者),即使它仍在孵化中。

    【讨论】:

    • 非常感谢彼得。您给我的 GroovyDoc 链接对我帮助很大。非常感谢和我的大力支持! :-)
    【解决方案2】:

    我发现我做错了什么。我忘了添加几个强制属性。

    sonarProperties {
        property "sonar.host.url", "http://sonar.someserver.int"
        property "sonar.jdbc.url", "jdbc:mysql://sonar.someserver.int:3306/sonar"
        property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver"
        property "sonar.jdbc.username", "*****"
        property "sonar.jdbc.password", "*****"
    
        //I added these properties to my gradle.build
        property "sonar.projectKey", "GradleAndroidTest"
        property "sonar.projectName", "GradleAndroidTest"
        property "sonar.projectVersion", "V1.0"
        property "sonar.language", "java"
        property "sonar.sources", "src"
        property "sonar.binaries", "build"
    }
    

    正如@Peter Niederwieser 所说,插件无法预先配置这些东西,所以我不得不手动添加它们。

    我也删除了 sonar 插件,改用了 sonar-runner 插件。

    【讨论】:

    • 这绝对是个好东西。要将它与现代 Android Studio gradle 设置一起使用,我实际上必须将 property "sonar.sources", "src" 更改为 property "sonar.sources", "src/main/java" 并且它有效!
    • 您是否通过此设置获取测试信息(测试计数和测试协方差)?
    • +1 @Zlatko 的问题,我使用的是非常相似的设置,我最不需要的是 SonarQube 上的代码覆盖率报告。
    • 嗨凯文。我还尝试将 SonarQube 与我的 android 项目集成。当我运行 sonar-runner 时,它会成功构建并显示 sonar-report.json 已创建。但是当我无法在仪表板上查看我的项目时。有什么配置吗?
    • 就我而言,我的项目中有很多风格,声纳不包括测试的问题!它甚至不显示覆盖代码的百分比!
    猜你喜欢
    • 2018-10-19
    • 2021-06-19
    • 2013-11-27
    • 2018-02-15
    • 2020-09-12
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多