2013-03-08 17 views
5

Sto provando a eseguire PMD da Ant in Eclipse durante la creazione del progetto.Come eseguire tutti i set di regole da una cartella usando PMD Ant in Eclipse?

Questo è il mio file build.xml:

<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> 

<target name="check_pmd"> 
    <pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\basic.xml"> 
     <formatter type="html" toFile="pmd_report.html" toConsole="true"/> 
     <fileset dir="C:\Users\Nikolay\ProjectName\src"> 
      <include name="**/*.java"/> 
     </fileset> 
    </pmd> 
</target> 

Funziona bene per basic.xml, ma voglio correre per tutti i set di regole nella cartella java (Ha circa 20 set di regole) così ho provato:

<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*.xml"> 
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*"> 

Ma entrambi falliscono quando provo a correre. C'è un modo per specificare la cartella, non un singolo file senza specificare manualmente l'elenco dei file?

Per i lettori futuri per configurare Ant PMD sotto Eclipse:

  • Scarica pmd-bin.zip dal sito ufficiale
  • Disimballare pmd.jar, jaxen.jar e asm.jar
  • Aggiungi vasetti sopra alla finestra - Preferenze - Ant - Runtime - Ant Home Entries - Aggiungi JAR esterni
  • Disimballaggio cartella rulesets
  • posizione di riferimento del set di regole da <pmd rulesetfiles=...>

risposta

3

(espansione risposta da coolfan per task ant) ​​

La documentazione di PMD rulesetfiles dice che è comma separated list of files.

rulesetfiles Un elenco separato da virgole di file delimitato da set di regole ('set di regole/basic.xml , set di regole/design.xml '). Se scrivi i tuoi file di regole , puoi metterli sul classpath e collegarli a qui. Sì, a meno che non venga utilizzato l'elemento nidificato del set di regole

Ant fornisce un modo per convertire set di file in tale formato. The task is pathconvert

Ecco un esempio dal sito

<fileset dir="${src.dir}" id="src.files"> 
     <include name="**/*.java"/> 
</fileset> 

<pathconvert pathsep="," property="javafiles" refid="src.files"/> 
+0

Upvote - non l'ho mai notato prima di leggerlo! – coolcfan

+0

Grazie per la risposta e mi dispiace per non essere in grado di usarlo questa settimana. Non ti spiace se do taglie a coolcfan? –

+0

@ Nikolay Kuznetsov: Nessun problema. Come vedi, ho ampliato la risposta da lui :) – Jayan

3

Forse il param non supporta jolly, come suggerisce il document.

Un rapido sguardo oltre il suo codice sorgente supporta anche la mia ipotesi, si veda RuleSetReferenceId.java, linea 194.

Quindi, ci vuole una proprietà che contiene una "lista" utilizzando , come delimitatore, come:

"rule1,rule2,rule3,path-to-rule-file4" 

La soluzione alternativa potrebbe essere la scansione della directory, elencare tutti i file rule-xml e creare una proprietà nel formato delimitato da virgole e quindi passarlo all'attività <pmd>.

Sfortunatamente, non conosco alcun compito ant che può farlo. Quindi potresti dover scrivere del codice.

posso venire con due modi:

  1. scrivere un compito formica; ci sono molti Q & Per quanto riguarda questo per Java, come this.
  2. scrivere groovy all'interno di un'attività <groovy>; anche molti Q&As.

EDIT:

Jayan suggerisce <pathconvert> compito, che dovrebbe essere la risposta giusta.

+0

Grazie per la risposta! Ti do la taglia e accetto la risposta a Jayan. Spero che vada bene per te. –

1

nel vaso di biblioteca PMD v'è un all-java.xml in cui sono stati inclusi tutti i set di regole. Provare a utilizzare il seguente:

<pmd rulesetfiles="rulesets/internal/all-java.xml">