2016-04-20 8 views
3

Ich habe Probleme, SonarQube 5.4 für ein Multi-Modul-Projekt korrekt einzurichten. Ich habe here lesen, here und here, alle bereitgestellten Lösungen nicht meine Fehler lösen: Ich habe während ein Sonar für jede Klasse analysieren ich erstellt (nicht für Bibliotheken enthalten I) eine Warnung:Richten Sie SonarQube 5.4 für Multi-Modul-Projekt mit Gradle ein: Klasse XYZ ist nicht über den ClassLoader zugänglich

„Klasse XYZ ist nicht über den ClassLoader zugänglich. "

und ich bekomme keine Ergebnisse im Sonar-Dashboard (weder auf localhost noch auf Jenkins), nicht einmal die Zeit der Analyse wurde aktualisiert. Ich verwende Gradle 2.10, hier ist meine Wurzel Gradle Datei:

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' 
} 

Könnte sein Dagger2 das Problem? Ich habe keine SonarQube-Konfigurationen in den Gradle-Dateien für die Modulgruppe, da this example from SonarQube keine Sonar-Konfigurationen in Modul-Gradle-Dateien bereitstellt.

Jede Hilfe oder ein Beispiel wird geschätzt! :)

Antwort

0

Während ich keine Ahnung habe, was mit Gradle los ist und wie man es richtig einrichtet, habe ich irgendwie teilweise bessere Ergebnisse im Scan bekommen (immer noch einige Klassen nicht geladen, aber meistens externe, also ich hoffe, der Scan funktioniert zumindest bei internen).

Ich benutze das Sonarqube-Plugin 2.0.1, Sonarqube 4.5.7, Gradle 2.14.1.

Ich setze dies für das endgültige Anwendungsmodul, so wird dir das nicht direkt mit "multi-modul" helfen, aber vielleicht kann etwas ähnliches in subprojects Teil gelegt werden? Da ich Groovy (1) nicht verstehe, ist es sehr schwierig und schmerzhaft für mich, etwas zu ändern, dauerte mehrere Stunden, bis es mir zumindest gelang, hierher zu kommen.

(1) alles, was ich versuche zu schreiben, funktioniert auf andere Weise als erwartet, zum Beispiel würde ich erwarten, die classFilesTree (Dateibaum-Instanz) direkt zu property "sonar.java.binaries" würde ausreichen, um die Dateien zu durchlaufen, aber ich landete mit collect + {} .each, um es zu erweitern, bevor die Eigenschaft gesetzt wird (ich hatte zu diesem Zeitpunkt mehrere Probleme, also bin ich mir nicht sicher, ob das der richtige Schritt war, und jetzt funktioniert es, also werde ich nicht experimentieren). Ich verstehe diese Hochsprachen einfach nicht, ich kann mir nie vorstellen, wie es auf der CPU landet und was wo mit was im Speicher ausführt, also kämpfe ich viel, mein Verstand ist darauf trainiert, über Bytes, nicht über Abstraktionen zu arbeiten.

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"] 
    } 
}