Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:从gradle运行SonaRunner_Gradle_Android Gradle Plugin_Sonarqube_Android Build_Sonar Runner - Fatal编程技术网

Android:从gradle运行SonaRunner

Android:从gradle运行SonaRunner,gradle,android-gradle-plugin,sonarqube,android-build,sonar-runner,Gradle,Android Gradle Plugin,Sonarqube,Android Build,Sonar Runner,我一直在努力让声纳报告与gradle Android项目一起运行。由于大多数重要的sonar属性仅在项目为java项目时才由应用程序应用,因此在com.android.application项目中应用它们时遇到困难 这是我的SonaRunner配置: sonarRunner { sonarProperties { property "sonar.sourceEncoding", "UTF-8" property "sonar.profile", "Andr

我一直在努力让声纳报告与gradle Android项目一起运行。由于大多数重要的sonar属性仅在项目为
java
项目时才由应用程序应用,因此在
com.android.application
项目中应用它们时遇到困难

这是我的SonaRunner配置:

sonarRunner {
    sonarProperties {
        property "sonar.sourceEncoding", "UTF-8"
        property "sonar.profile", "Android Lint"
        property "sonar.sources", android.sourceSets.main.java.srcDirs
        property "sonar.binaries", file("${project.buildDir}/intermediates/classes/app") 
        property "sonar.libraries", "" // what to put here?
    }
}
问题是,sonar抱怨找不到类,因为无法引用库

如何在我的sonarRunner配置中引用依赖项+android库


错误输出示例:

INFO  - Load batch settings
INFO  - User cache: C:\Users\mannaz\.sonar\cache
INFO  - Install plugins
INFO  - Install JDBC driver
INFO  - Create JDBC datasource for jdbc:postgresql://sonar.local/sonar?useUnicode=true&characterEncoding=utf8
INFO  - Initializing Hibernate
INFO  - Load project settings
INFO  - Apply project exclusions
WARN  - 'sonar.dynamicAnalysis' is deprecated since version 4.3 and should no longer be used.
INFO  - -------------  Scan app
INFO  - Load module settings
INFO  - Loading technical debt model...
INFO  - Loading technical debt model done: 20 ms
INFO  - Loading rules...
INFO  - Loading rules done: 584 ms
INFO  - Configure Maven plugins
INFO  - Compare to previous analysis (2014-08-05)
INFO  - Compare over 30 days (2014-07-06, analysis of 2014-07-07 11:33:19.0)
INFO  - Compare to previous version (2014-07-21)
INFO  - No quality gate is configured.
INFO  - Base dir: C:\Users\mannaz\workspace\project\app
INFO  - Working dir: C:\Users\mannaz\workspace\project\app\build\sonar
INFO  - Source dirs: C:\Users\mannaz\workspace\project\app\src\main\java
INFO  - Binary dirs: C:\Users\mannaz\workspace\project\app\build\intermediates\classes\app
INFO  - Source encoding: UTF-8, default locale: de_AT
INFO  - Index files
INFO  - 197 files indexed
INFO  - Quality profile for java: Android Lint
INFO  - Sensor JavaSquidSensor...
INFO  - Java Main Files AST scan...
INFO  - 197 source files to be analyzed
ERROR - Class not found: android.widget.RelativeLayout
ERROR - Class not found: android.os.Handler
ERROR - Class not found: android.content.Context
ERROR - Class not found: android.app.Activity
ERROR - Class not found: android.util.AttributeSet
ERROR - Class not found: android.view.View
ERROR - Class not found: com.nostra13.universalimageloader.core.DisplayImageOptions
ERROR - Class not found: com.google.gson.Gson

我想您只需要使用正确的配置手动设置库属性。大概是这样的:

sonarRunner {
    sonarProperties {
        property "sonar.sourceEncoding", "UTF-8"
        property "sonar.profile", "Android Lint"
        property "sonar.sources", android.sourceSets.main.java.srcDirs
        property "sonar.binaries", file("${project.buildDir}/intermediates/classes/app") 
        property "sonar.libraries", "android.sourceSets.main.runtimeClasspath"
    }
}

或者您正确的依赖项配置是正确的。

我有一个适用于我的多项目Gradle构建的解决方案:

subprojects.each { p ->
    sonarRunner {
        sonarProperties {
            // ... some settings omitted ...
            property p.name + '.sonar.java.binaries', p.sourceSets.main.output.classesDir
            property p.name + '.sonar.java.libraries', p.sourceSets.test.runtimeClasspath.filter { File f -> f.exists() }
        }
    }
}
请注意

  • 我使用测试运行时类路径库,因为我们提供了一个在主运行时类路径中不会考虑的编译范围
  • sonar runner会抱怨库设置是否包含不存在的目录(例如,因为模块没有src/main/resources)
  • 之所以使用
    sonar.java.libraries
    ,是因为它不适合我使用
    sonar.libraries

  • 或者你正确的依赖项配置是正确的。
    这正是我想知道的:正确的依赖项配置是什么?好吧,我对android没有那么多经验。但通常默认值是
    运行时
    编译
    。不管怎样,它都应该在依赖项块中定义,不是吗?在最坏的情况下,只需迭代“project.dependecies”并添加每个配置;-)你知道这里应该有什么吗?属性“sonar.libraries”,“”//在此处放置什么?我也有同样的问题,但这不起作用:属性“sonar.libraries”、“android.sourceset.main.runtimeClasspath”>
    p.sourceset.test.runtimeClasspath.filter{File f->f.exists()}
    为什么要查看测试类路径?我假设本例中的库应该是第三方库?@Alix这与我在源代码下面的第一句话有关-这是因为我在providedCompile作用域中有依赖项,它们不属于主运行时类路径(因为它们存在于目标系统上),而是属于测试运行时类路径。