3

マルチモジュール プロジェクト用に SonarQube 5.4 を正しくセットアップするのに苦労しています。ここ、ここ 、ここ読みましたが、提供されたすべてのソリューションでエラーが解決されません:作成したすべてのクラス(含めたライブラリではありません)のソナー分析中に警告が表示されました:

「クラス XYZ は ClassLoader からアクセスできません。」

そして、Sonar ダッシュボード (localhost でも Jenkins でも) に結果が得られず、分析の時間も更新されませんでした。私は Gradle 2.10 を使用しています。ルート Gradle ファイルは次のとおりです。

buildscript {
repositories {
    jcenter()
    mavenCentral()
    maven {
        url "https://plugins.gradle.org/m2/"
    }
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.0-rc1"
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
}
apply from: 'buildsystem/dependencies.gradle'
apply plugin: "org.sonarqube"

subprojects {
sonarqube {
    properties {
        property "sonar.host.url", "http://localhost:9000/"
        property "sonar.sources", "./src/main/java"
        property "sonar.java.binaries", "./build/"
        property "sonar.projectKey", "net.project"
        property "sonar.projectName", "Project Android"
        property "sonar.projectVersion", "0.5"
        property "sonar.sourceEncoding", "UTF-8"
        }
    }
}
allprojects {
ext {
    androidApplicationId = 'net.project'
    androidVersionCode = 1
    androidVersionName = "0.5"
    testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
    testApplicationId = 'com.beatclip.android.presentation.test'
    }

repositories {
    jcenter()
    }
}

task wrapper(type: Wrapper) {
description 'Creates the gradle wrapper.'
gradleVersion '2.10'
}

問題は Dagger2 でしょうか? SonarQube のこの例では、モジュール Gradle ファイルにも Sonar 構成が提供されていないため、モジュール セットの Gradle ファイルに SonarQube 構成はありません。

どんな助けや例も大歓迎です! :)

4

1 に答える 1

0

gradleで何が起こっているのか、それを正しく設定する方法はわかりませんが、何とかスキャンで部分的に良い結果を得ることができました(それでも一部のクラスはロードに失敗しますが、ほとんどは外部クラスなので、少なくともスキャンが機能することを願っています)内部のもの)。

私は sonarqube プラグイン 2.0.1、sonarqube 4.5.7、gradle 2.14.1 を使用しています。

私はこれを最終的なアプリケーション モジュールに設定しているので、これは「マルチモジュール」に直接役立つわけではありませんが、似たようなものをsubprojects一部に入れることはできますか? 私は groovy (1) を理解していないので、何かを変更するのは非常に困難で苦痛であり、少なくともここにたどり着くまでに数時間かかりました。

(1)私が書き込もうとするものはすべて、予想とは異なる方法で機能します。たとえば、 classFilesTree(ファイルツリーインスタンス)を直接追加property "sonar.java.binaries"するだけでファイルをトラバースするのに十分であると予想していましたが、最終的には collect + {}.each になりましたプロパティを設定する前に展開します(その時点でいくつかの問題があったため、これが正しい手順であったかどうかはわかりませんが、今では機能するため、実験するつもりはありません)。私は単にこれらの高水準言語を理解していません。それがどのように CPU に到達し、何がメモリ内のどこで実行されるかを想像することはできません。

plugins {  //instead of the old way with dependecies + apply plugin
    id "org.sonarqube" version "2.0.1"
}

// path to Android SDK jar file, requires sdk.dir=/path/file in local.properties
def androidSdkJarPath;
afterEvaluate {
    def rootDir = project.rootDir
    def localProperties = new File(rootDir, "local.properties")
    if (localProperties.exists()) {
        Properties properties = new Properties()
        localProperties.withInputStream { instr ->
            properties.load(instr)
        }
        def sdkDir = properties.getProperty('sdk.dir')
        androidSdkJarPath = sdkDir + "/platforms/" + android.compileSdkVersion + "/android.jar"
        logger.info('androidSdkJarPath: ' + androidSdkJarPath)
    }
}

sonarqube {
    properties {
        // ... other module configuration for sonar...

        FileTree classFilesTree = fileTree(dir: 'build/intermediates/classes', include: '**/release/**')
        FileTree jarFilesFromAarsTree = fileTree(dir: 'build/intermediates/exploded-aar', include: '**/jars/*.jar', exclude: ['**/debug/jars/**', '**/snapshot/jars/**'])

        def classFiles = []
        def jarFilesFromAars = []
        classFilesTree.collect { relativePath(it) }.each { classFiles += it }
        jarFilesFromAarsTree.collect { relativePath(it) }.each { jarFilesFromAars += it }
//        logger.warn('classFiles: ' + classFiles )
//        logger.warn('jarFilesFromAars: ' + jarFilesFromAars )
        // Still MIA (on my project): android.support.v4.**, ...

        property "sonar.java.binaries", classFiles
        property "sonar.libraries", [jarFilesFromAars, androidSdkJarPath]
    }
}

subprojects {
    sonarqube {
        properties["sonar.sources"] += "src/main/java"
        properties["sonar.test"] += ["src/androidTest/java", "src/test/java"]
    }
}
于 2016-08-04T09:55:17.193 に答える