2013-08-21 23 views
5

Gradle 1.6 Linux.Gradle PMD Checkstyle Findbugs - Quale directory sourceSet per funzionare Java build

Java costruire la struttura del progetto

  • Project_or_Module
    • src/java (contiene il codice sorgente Java)
    • test/java (contiene test JUnit - test di unità)
    • src/Java- test (contiene test di integrazione)
    • etc/etc (altro .. .. cartelle sotto il progetto)

Ho il seguente file di configurazione/build.gradle globale:

apply plugin: 'java' 
    apply plugin: 'pmd' 
    apply plugin: 'findbugs' 
    apply plugin: 'checkstyle' 
    apply plugin: 'code-quality' 
    apply plugin: 'jacoco' 

    tasks.withType(Compile) { 
    options.debug = true 
    options.compilerArgs = ["-g"] 
    } 

    checkstyle { 
     configFile = new File(rootDir, "config/checkstyle.xml") 
     ignoreFailures = true 
    } 


    findbugs { 
     ignoreFailures = true 
    } 

    pmd { 
     ruleSets = ["basic", "braces", "design"] 
     ignoreFailures = true 
    } 

    jacoco { 
     toolVersion = "0.6.2.201302030002" 
     reportsDir = file("$buildDir/customJacocoReportDir") 
    } 

    sourceSets { 
     main { 
     java { 
      srcDir 'src/java' 
     } 
     } 
     test { 
     java { 
      srcDir 'test/java' 
     } 
     } 
     integrationTest { 
     java { 
      srcDir 'src/java-test' 
     } 
     } 
    } 

    test { 
     jacoco { 
      append = false 
      destinationFile = file("$buildDir/jacoco/jacocoTest.exec") 
      classDumpFile = file("$buildDir/jacoco/classpathdumps") 
     } 
    } 

    jacocoTestReport { 
     group = "Reporting" 
     description = "Generate Jacoco coverage reports after running tests." 
     reports { 
       xml{ 
        enabled true 
        destination "${buildDir}/reports/jacoco/jacoco.xml" 
       } 
       csv.enabled false 
       html{ 
        enabled true 
        destination "${buildDir}/jacocoHtml" 
       } 
     } 
     additionalSourceDirs = files(sourceSets.main.allJava.srcDirs) 
    } 

Per alcuni dei progetti, tutto funziona bene. Ad esempio, quando eseguo "gradle clean build" o "gradle clean build jacocoTestReport", tutto ha successo.

Per pochi altri progetti, vedo i seguenti problemi e ho bisogno di aiuto.

1) "gradle clean build" il comando funziona se rimuovo/commenta le seguenti righe per un progetto. Ma quando quelle righe non sono commentate come nell'istantanea del codice mostrata sopra, allora vedo degli errori. Gli errori sono indicati di seguito dopo lo snapshot del codice.

 apply plugin: 'java' 
// apply plugin: 'pmd' 
// apply plugin: 'findbugs' 
// apply plugin: 'checkstyle' 
// apply plugin: 'code-quality' 
    apply plugin: 'jacoco' 

    tasks.withType(Compile) { 
    options.debug = true 
    options.compilerArgs = ["-g"] 
    } 

// checkstyle { 
//  configFile = new File(rootDir, "config/checkstyle.xml") 
//  ignoreFailures = true 
// } 


// findbugs { 
//  ignoreFailures = true 
// } 

// pmd { 
//  ruleSets = ["basic", "braces", "design"] 
//  ignoreFailures = true 
// } 
// 

    jacoco { 
     toolVersion = "0.6.2.201302030002" 
     reportsDir = file("$buildDir/customJacocoReportDir") 
    } 

    sourceSets { 
     main { 
     java { 
      srcDir 'src/java' 
     } 
     } 
     test { 
     java { 
      srcDir 'test/java' 
     } 
     } 
     integrationTest { 
     java { 
      srcDir 'src/java-test' 
     } 
     } 
    } 

    test { 
     jacoco { 
      append = false 
      destinationFile = file("$buildDir/jacoco/jacocoTest.exec") 
      classDumpFile = file("$buildDir/jacoco/classpathdumps") 
     } 
    } 

    jacocoTestReport { 
     group = "Reporting" 
     description = "Generate Jacoco coverage reports after running tests." 
     reports { 
       xml{ 
        enabled true 
        destination "${buildDir}/reports/jacoco/jacoco.xml" 
       } 
       csv.enabled false 
       html{ 
        enabled true 
        destination "${buildDir}/jacocoHtml" 
       } 
     } 
     additionalSourceDirs = files(sourceSets.main.allJava.srcDirs) 
    } 

Errori: A. Attività non riuscita. L'output mostra quanto segue.

.. 
.... 
:compileIntegrationTestJava 
/production/jenkinsAKS/jobs/Project_or_Module/workspace/src/java-test/com/tr/ids/application/project_or_module/Project_or_ModuleTestCase.java:11: 
package org.apache.cactus does not exist import 
org.apache.cactus.ServletTestCase; 
         ^/production/jenkinsAKS/jobs/Project_or_Module/workspace/src/java-test/com/tr/ids/application/project_or_module/Project_or_ModuleTestCase.java:13: 
> cannot find symbol symbol: class ServletTestCase public class 
> Project_or_ModuleTestCase extends ServletTestCase 
> 
... 
    .... 
    ..... 
    some more errors 
    ... 
    ... 
    100 errors (similar errors). 

Si noterà qui è che l'errore viene in cui Gradle sta chiamando il compito di cui sopra per la cartella "src/java-test".

** La mia domanda1 **: Con quelle righe commentate nel file build.gradle, non vedo mai questi errori e le attività "clean build jacocoTestReport" vengono completate correttamente ma quando il codice per pmd/findbugs/checkstyle è abilitato, I vedere questi errori. Perché sta compilando il codice java-test. Ho pensato che il codice sorgente fosse solo sotto src/java (codice sorgente java effettivo per il progetto: project_or_module)

B. Uno degli altri progetti ProjectAUtilities fallisce in fase PMD anche se l'errore ignore è vero in build.gradle per pmd . Errore dice che 3 test falliscono.

log di errore:

20:06:20 :pmdIntegrationTest UP-TO-DATE 
20:06:21 :pmdMain 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/pmd/pmd/4.3/pmd-4.3.pom 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/asm/asm/3.2/asm-3.2.pom 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/asm/asm-parent/3.2/asm-parent-3.2.pom 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/junit/junit/4.4/junit-4.4.pom 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/xml-apis/xml-apis/1.3.02/xml-apis-1.3.02.pom 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/pmd/pmd/4.3/pmd-4.3.jar 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/asm/asm/3.2/asm-3.2.jar 
20:06:21 Download http://devserver2:8081/artifactory/jcenter-cache/junit/junit/4.4/junit-4.4.jar 
20:06:24 251 PMD rule violations were found. See the report at: file:///production/jenkinsAKS/jobs/ProjectAUtilities/workspace/build/reports/pmd/main.html 
20:06:26 :pmdTest 
20:06:26 16 PMD rule violations were found. See the report at: file:///production/jenkinsAKS/jobs/ProjectAUtilities/workspace/build/reports/pmd/test.html 
20:06:26 :test 
20:06:26 Download http://devserver2:8081/artifactory/jcenter-cache/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002.pom 
20:06:26 Download http://devserver2:8081/artifactory/jcenter-cache/org/jacoco/org.jacoco.build/0.6.2.201302030002/org.jacoco.build-0.6.2.201302030002.pom 
20:06:27 Download http://devserver2:8081/artifactory/jcenter-cache/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002.jar 
20:06:29 Xlib: connection to "localhost:13.0" refused by server 
20:06:29 Xlib: PuTTY X11 proxy: wrong authorisation protocol attempted 
20:06:29 
20:06:29 com.tr.ids.util.test.chart.TestChartUtilities > getPieChart FAILED 
20:06:29  java.lang.InternalError at TestChartUtilities.java:89 
20:06:29 
20:06:29 com.tr.ids.util.test.chart.TestChartUtilities > getLegend FAILED 
20:06:29  java.lang.NoClassDefFoundError at TestChartUtilities.java:103 
20:06:29 
20:06:29 com.tr.ids.util.test.chart.TestChartUtilities > useString FAILED 
20:06:29  java.lang.NoClassDefFoundError at TestChartUtilities.java:143 
20:06:29 
20:06:29 140 tests completed, 3 failed 
20:06:29 :test FAILED 
20:06:29 
20:06:29 FAILURE: Build failed with an exception. 
20:06:29 
20:06:29 * What went wrong: 
20:06:29 Execution failed for task ':test'. 
20:06:29 > There were failing tests. See the report at: file:///production/jenkinsAKS/jobs/ProjectAUtilities/workspace/build/reports/tests/index.html 
20:06:29 
20:06:29 * Try: 
20:06:29 Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 
20:06:29 
20:06:29 BUILD FAILED 

mio question2: Quale configurazione devo impostare per la sezione PMD in build.gradle che ignorerà le prove se non riescono. Penso di avere già ignoreFailures = true

C. Come usare include/exclude per Checkstyle/PMD/Findbug nel file build.gradle (non ANT). ad esempio non andrà e non farà altro che la cartella "src/java".

Grazie.

risposta

10

Di seguito ha fatto il trucco per tutte le questioni tranne B (domanda 2) cioè aggiunta una linea sourceSets e ha detto quelle 3 strumenti (PMD/checkstyle/findbugs) per vedere solo principale (codice sorgente che è "src/java ") nella definizione sourceSets. A proposito, ho preso la sezione "sourceSets" e l'ho definita prima delle seguenti righe.

checkstyle { 
     configFile = new File(rootDir, "config/checkstyle.xml") 
     ignoreFailures = true 
     sourceSets = [sourceSets.main] 
    } 


    findbugs { 
     ignoreFailures = true 
     sourceSets = [sourceSets.main] 
    } 

    pmd { 
     ruleSets = ["basic", "braces", "design"] 
     ignoreFailures = true 
     sourceSets = [sourceSets.main] 
    } 
+0

il codice sopra appena creato checkstyle/findbugs/pmd - controlla solo src/java (che è il mio sourceSets.main). a parte questo, l'errore per la mia domanda 1 è stato risolto dopo aver incluso/menzionato il nome del vaso dipendente nel file build.gradle (a livello di progetto/modulo). Il secondo errore o domanda sul plugin Xvfb, è stato risolto rimuovendo il plugin Xvfb in Jenkins, riavviando jenkins e infine pulendo l'area di lavoro, eliminando tutto ciò che è stato inder jenkins istanza/jobs//workspace/.... –