2013-03-08 15 views
5

Próbuję uruchomić PMD z Ant w Eclipse podczas budowania projektu.Jak uruchomić wszystkie zestawy reguł z folderu za pomocą PM PM w Eclipse?

To jest mój plik 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> 

To działa dobrze dla basic.xml, ale chcę, aby uruchomić dla wszystkich zestawów reguł w java folderu (Ma około 20 zestawów reguł) Więc próbowałem:

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

Ale obaj zawodzą, gdy próbuję biec. Czy istnieje sposób na określenie folderu, a nie pojedynczy plik bez ręcznego określania listy plików?

Dla przyszłych czytelników, aby skonfigurować Ant PMD pod Eclipse:

  • Pobierz pmd-bin.zip z oficjalnej strony
  • Rozpakuj pmd.jar, jaxen.jar i asm.jar
  • Dodaj słoiki wyżej Window - Preferencje - Ant - Runtime - Ant Home Entries - Dodaj zewnętrzne pliki JAR
  • Rozpakuj folder rulesets
  • położenie środka zestawu reguł z <pmd rulesetfiles=...>

Odpowiedz

3

(rozszerzenie odpowiedź od coolfan dla mrówek zadania)

Dokumentacja PMD rulesetfiles mówi, że jest comma separated list of files.

rulesetfiles rozdzielany przecinkami lista plików zestaw reguł ("zestawy reguł/basic.xml , rulesets/design.xml "). Jeśli napiszesz własne pliki z ustawieniami , możesz umieścić je w ścieżce klas i podłączyć tutaj tutaj. Tak, chyba że użyty zostanie element zagnieżdżony zestawu reguł

Ant zapewnia sposób konwersji zestawu plików do takiego formatu. The task is pathconvert

tutaj jest przykład ze strony internetowej

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

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

Awansuj - nigdy nie zauważyłeś tego zadania przed przeczytaniem tego! – coolcfan

+0

Dziękuję za odpowiedź i przepraszam za nieumiejętność korzystania z niego w tym tygodniu. Nie masz nic przeciwko, jeśli dam nagroda dla coolcfan? –

+0

@ Nikolay Kuznetsov: Nie ma problemu. Jak widzisz, poszerzyłem odpowiedź od niego :) – Jayan

3

Może param nie obsługuje wieloznacznego, jak document sugeruje.

Szybkie spojrzenie nad jego kodem źródłowym obsługuje również moje przypuszczenie, zobacz RuleSetReferenceId.java, linia 194.

Tak, to zajmuje nieruchomość, która zawiera „wykaz” używając , jako separatora, jak:

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

Obejście problemu może polegać na zeskanowaniu katalogu, wyświetleniu wszystkich plików rule-xml i zbudowaniu właściwości w formacie rozdzielanym przecinkami, a następnie przekazaniu jej do zadania <pmd>.

Niestety, nie znam żadnego zadania ant, które może to zrobić. Być może będziesz musiał napisać jakiś kod.

mogę wymyślić dwa sposoby:

  1. napisać ant zadania; istnieje wiele Q & Co do tego dla Javy, na przykład this.
  2. napisać groovy wewnątrz zadanie <groovy>; także wielu Q&As.

EDIT:

Jayan sugeruje <pathconvert> zadania, które powinny być prawidłowa odpowiedź.

+0

Dzięki za odpowiedź! Daję ci nagrodę i przyjmij odpowiedź do Jayana. Mam nadzieję, że ci to odpowiada. –

1

w bibliotece słoiku pmd tam jest wszystko java.xml gdzie wszystkie zestawy reguł zostały uwzględnione. Spróbuj użyć następującego:

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