mercoledì 25 gennaio 2012

Gradle sonar e multi-modulo Progetti

Amo Sonar . E 'un modo meraviglioso per raccogliere alcune metriche per i vostri progetti Java - senza problemi e avvolto in un dolce dall'aspetto dell'interfaccia utente. Per i progetti basati su Maven Sonar opere letteralmente fuori dalla scatola. Basta avviare l'istanza Sonar (assumendo che si sta utilizzando le impostazioni predefinite in esecuzione su localhost) e poi semplicemente sparare utilizzando:?
1.$ mvn sonar: sonar 
Pochi istanti dopo si dovrebbe avere le metriche disponibili sul sito:

1.http://localhost : 9000 /
Bene, negli ultimi giorni sono stato la creazione di un multi-modulo Gradle progetto Sonar. Vorrei iniziare dicendo che Gradle è impressionante. Avere la possibilità di dichiarare le dipendenze come battute e anche di essere in grado di personalizzare facilmente i vostri script, hanno ancora impostazioni predefinite, è molto bello. Sorta di il meglio dei due mondi. Impostazione di Sonar per un progetto di moduli multi, però, è purtroppo un po 'più complicato, rispetto a ciò che io sono abituato al mondo Maven. Non è terribilmente complicato, ma ci ho messo un po 'per raccogliere tutti i pezzi di informazioni. Ottenere il vostro plugin per Sonar a fare solo una cosa è abbastanza semplice. Basta seguire i passi di base descritte nella documentazione di plug-in:


  • http://gradle.org/docs/current/userguide/sonar_plugin.html
Di differenziazione tra i plugin Sonar per Gradle e Maven si è, che la versione Gradle non viene eseguito automaticamente l'analisi di copertura del codice. Questo deve essere manualmente l'installazione. Questo è dove il doc ufficiali solo vagamente si riferisce a Cobertura. Per prima cosa, ho provato a usare Cobertura per la copertura del codice, ma mi sembrava di correre in difficoltà per i miei progetti multi-modulo. Il plugin Cobertura è qui:

https://github.com/valkolovos/gradle_cobertura/wiki
Per caso mi sono reso conto che i ragazzi Sonar hanno un repository GitHub con esempi su come configurare sonar per i vari sistemi di compilazione, tra cui Gradle:
  • https://github.com/SonarSource/sonar-examples/
Nella loro esempi, stanno usando JaCoCo , che non è menzionato nella documentazione originale Gradle e magari avrei potuto continuare con Cobertura ma sembrava che Sonar è stato preferendo JaCoCo e così ho continuato con questo. Alcuni Gradle Limitazioni Plugin Sonar Il Sonar Plugin Gradle è una limitazione fastidiosa, dove posso correre per il progetto ROOT OR per i sotto-progetti individualmente. Vedere il seguente Gradle biglietto Jira per i dettagli:

  • http://issues.gradle.org/browse/GRADLE-1813
Inoltre, ho colpito il piccolo problema che non riesco a impostare il link nel cruscotto Sonar. Questo sembra essere correlato al problema seguente Sonar Jira:
  • https://jira.codehaus.org/browse/SONAR-2749
Il plugin di copertura JaCoCo codice è "un po 'meno" supportati dal plugin Sonar Gradle, ad esempio il plugin Gradle non ha un setter esplicito per la JacocoReportPath  e assume nella cartella "target", come la directory di compilazione di default. Pertanto è necessario impostare in modo esplicito:
puntelli ["sonar.jacoco.reportPath"] = "$ {} buildDirName / jacoco.exec"
Infine, ho deviato un po 'da esempio Gradle SonarSource, e invece di proprietà del sistema, ho voluto utilizzare le proprietà Gradle per consentire agli utenti di fornire non di default le impostazioni di configurazione Sonar (url databasem, parametri jdbc ecc.) Bene, durante l'impostazione che fino mi sono imbattuto in un altro problema Gradle Jira:
  • http://issues.gradle.org/browse/GRADLE-1826
Ma alla fine, io sono felicemente in grado di eseguire un progetto multi-modulo Gradle con Sonar e raccolta di dati statistici di code coverage. Ecco il codice relevant dal mio build.gradle file:

. 01si applicano plugin: 'sonar'
02. 
03.sonar {
04. 
05.se (rootProject.hasProperty ( 'sonarHostUrl' )) {
06.server.url = rootProject.sonarHostUrl
07.}
08. 
09.database {
10.se (rootProject.hasProperty ( 'sonarJdbcUrl' )) {
11.url = rootProject.sonarJdbcUrl
12.}
13.se (rootProject.hasProperty ( 'sonarJdbcDriver' )) {
14.driverClassName = rootProject.sonarJdbcDriver
15.}
16.se (rootProject.hasProperty ( 'sonarJdbcUsername' )) {
17.username = rootProject.sonarJdbcUsername
18.}
19.se (rootProject.hasProperty ( 'sonarJdbcPassword' )) {
20.password = rootProject.sonarJdbcPassword
21.}
22.}
23. 
24.Progetto {
25.dynamicAnalysis = "reuseReports"
26.withProjectProperties {props ->
27.props [ "sonar.core.codeCoveragePlugin" ] = "jacoco"
28.props [ "sonar.jacoco.reportPath" ] = "$ {} buildDirName / jacoco.exec"
29.}
30.}
31. 
32.println "i parametri utilizzati Sonar: server.url = '$ {} server.url'; database.url = '$ {} database.url'; database.driverClassName = '$ {} database.driverClassName'; database. username = '$ {database.username}' " )
33. 
34.}
35. 
. 36sottoprogetti {sottoprogetto ->
37. 
38....
39. 
42.configurazioni {
43.jacoco gruppo / / configurazione utilizzata da Sonar per fornire code coverage con JaCoCo
44.}
45. 
46.​​/ / dipendenze che sono comuni a tutti i progetti java
47.dipendenze {
48....
49.jacoco gruppo: "org.jacoco" , name: "org.jacoco.agent" , versione:"0.5.3.201107060350" , classificatore: "runtime"
50....
51.}
52. 
53.prova {
54.jvmArgs "-javaagent:${configurations.jacoco.asPath}=destfile=${buildDir}/jacoco.exec,includes=org.your.project.*"
55.}
56....
57.}
Spero che questo sia informazioni utili per tutti gli utenti Gradle là fuori. 



Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.