2015-08-12 10 views
50

Ich habe wirklich einen "Überlauf" bekommen, der versucht, diese Dinge zusammenzuarbeiten. Ich folgte der Anleitung von hier: http://docs.sonarqube.org/display/PLUG/Android+Lint+Plugin und bekam schließlich einen SonarQube 5.1.1 Server mit Android Lint Plugin 1.1 installiert. Dann habe ich meine Multiple-Modules-Version von Gradle so konfiguriert, dass sie mit dem SonarQube-Plugin funktioniert: siehe Codefragment von der root-Konfiguration unten.Android-Projekt mit Lint und SonarQube analysieren

plugins { 
    id 'org.sonarqube' version '1.0' 
} 

sonarqube { 
    properties { 

     property 'sonar.host.url', 'sonarqube-server:9000' 
     property 'sonar.jdbc.url', 'jdbc:mysql://sonarqube-db:3306/sonar?useUnicode=true&characterEncoding=utf8' 
     property 'sonar.jdbc.driverClassName', 'com.mysql.jdbc.Driver' 
     property 'sonar.jdbc.username', 'sonar' 
     property 'sonar.jdbc.password', 'sonar' 
     property 'sonar.sourceEncoding', 'UTF-8' 
     property 'sonar.login', 'admin' 
     property 'sonar.password', 'admin' 

     property 'sonar.profile', 'Android Lint' 

     property 'sonar.import_unknown_files', true 
     property 'sonar.android.lint.report', 'build/outputs/lint-results.xml' 
    } 
} 

Und danach lief ich lint sonarqube Aufgabe die Analyse auszuführen. Als Ergebnis erhielt ich einen Großteil der Lint-Fehler in Bezug auf "RetroLambda" -Projekt (java.lang.UnsupportedOperationException: Unknown ASTNode child: LambdaExpression), die ganz normal ist, und lint-results.xml (mit HTML-Version begleitet) Dateien für jedes Modul mit Beschreibungen der erkannten Probleme. Der Bericht sagte, dass 8 Fehler und 434 Warnungen gefunden wurden. Es ist jedoch ein Fehler aufgetreten, als das Sonarqube-Plugin versucht hat, die Ergebnisse auf den SonarQube-Server hochzuladen. Das Protokoll war voll mit den Meldungen "Datei konnte nicht gefunden werden" und "Regel konnte nicht gefunden werden". Und als die Verarbeitung abgeschlossen war, wurden keine Probleme für mein Projekt auf dem SonarQube-Server gemeldet.

Und ich frage mich, was ist schiefgelaufen? Ich überprüfte die Pfade und alle Dateien waren da. Ich habe alle Diskussionen durchgesehen, die ich erreichen konnte, und es scheint, als wäre meine Konfiguration korrekt und ich mache alles richtig. Hat jemand eine Ahnung, was ich vermisst habe und was überprüft werden muss? Irgendwelche Vorschläge oder Ideen sind willkommen.

Ich bin auch glücklich, wenn es eine Möglichkeit gibt, Lint Daten mit externen SonarQube Runner zu importieren, da dieses Tool vorhersehbarer und stabiler als ein Gradle Plugin zu sein scheint.

+0

Sind die Pfade im Flusenbericht korrekt? Sind sie relativ oder absolut? Gelingt die Analyse eines einzelnen Moduls? FYI, hier sind die Dokumente zum Konfigurieren eines Multi-Modul-Projekts für die Sonar Runner-Analyse: http://docs.sonarqube.org/display/SONAR/Analyzing+mit+SonarQube+Runner#AnalyzingwithSonarQubeRunner-MultimoduleProject –

+1

Würden Sie das sein? in der Lage, die Fehlermeldung zu teilen, die Sie über die Datei/Regel nicht finden können? Könnte helfen, das Problem zu lokalisieren. Nach Ihrer Idee über die Verwendung von Sonar-Runner zu Lint-Berichte zu importieren: Dies sollte funktionieren, wenn Sie die Sonar.android.lint.report-Eigenschaft für Sonar-Runner konfigurieren. – benzonico

Antwort

1

Ihre Einstellungen scheinen gut, haben Sie Android-Plugin auf SonarQube Server installiert.

Ich sehe diesen Schritt nicht auf Ihrer Frage, wenn Sie nicht auf Einstellungen-> System-> Update Center gehen und Android-Plugin installieren.

enter image description here

Sobald das heißt Sie Sonarqube Server und Rerun Sonar-Läufer neu starten müssen installiert.

6

Ich hatte Erfolg mit einem Multimodul-Android-Projekt. Da die kompletten Builddateien zu viel Platz beanspruchen, zeige ich hier nur die relevanten Teile.

Im build.gradle übergeordneten Projekt, das ich gesetzt:

buildscript { 
    ... 
    dependencies { classpath 'com.android.tools.build:gradle:1.5.0' 
    ... 
} 
plugins { id "org.sonarqube" version "1.1" } 

Im App-Projekt (und alle anderen Kinder) Ich habe:

sonarqube { 
    properties { 
     property "sonar.profile", "Android Lint" 
     property "sonar.sources", "./src/main/java" 
    } 
} 

, dass die minimale Setup für Sonarqube war Plugin, um mit der Analyse der Projekte zu beginnen.

+1

Wow, das funktioniert wirklich. Ich war lange auf der Suche nach einer Lösung, die meinen Tag ausmachte. AndroidStudio beklagt sich immer noch über die Sonarqube 'Eigenschaften' kann nicht auf groovy.lang.Closure angewendet werden ...wtf –

+1

Die Eigenschaft sonar.profile wurde entfernt und muss nun über die Benutzeroberfläche von Sonarqube festgelegt werden: https://jira.sonarsource.com/browse/SONAR-5370 –