http://pmd.sourceforge.net/howtowritearule.html
In pratica la guida dice di scaricare i sorgenti di PMD, aggiungere la nuova classe secondo quanto indicato, e ricompilare il tutto.
I sorgenti di PMD si scaricano da qui (scaricando la alpha 5.o non c'è il file build.xml necessario per compilare con ANT):
http://sourceforge.net/projects/pmd/files/pmd/4.2.6/pmd-src-4.2.6.zip/download
Una volta scaricato lo zip, si decomprime in una cartella, ad es. C:\Users\Duccio\Lavori\pmd-src-4.2.6
Occorre aggiungere il jar di Junit al classpath (JUnit: download)
Occorre quindi scaricare e configurare ANT per compilare.
Da qui si scarica ANT: http://ant.apache.org/bindownload.cgi
Qui è descritto come installarlo: http://ant.apache.org/manual/install.html#installing in particoalre fare attenzione a configurare el seguenti variabili di ambiente:
set ANT_HOME=c:\ant set JAVA_HOME=c:\jdk-1.5.0.05 set PATH=%PATH%;%ANT_HOME%\bin
Nonostante questo, quando ho eseguito la verifica di installazione come indicato nella guida, su Windows7 ho incontrato questo problema:
Unable to locate tools.jar
risolto grazie a questo post:
http://stackoverflow.com/questions/2619584/how-to-set-java-home-on-windows-7
in cui si suggerisce:
What worked for me was adding the %JAVA_HOME%\bin to Path environment variable with the JAVA_HOME environment variable pointing to the jdk folder
A questo punto la verifica ha funzionato.
A questo punto, da cmd ci si sposta in:
cd C:\Users\Duccio\Lavori\pmd-src-4.2.6
e semplicemente si esegue:
ant
se nel folder è presente un file build.xml corretto il risultato dovrebbe essere:
jar:[jar] Building jar: C:\Users\Duccio\Lavori\pmd-src-4.2.6\lib\pmd-4.2.6.jar[jar] Building jar: C:\Users\Duccio\Lavori\pmd-src-4.2.6\lib\pmd-test-4.2.6.jarBUILD SUCCESSFULTotal time: 31 secondsA questo punto si può importare il progetto in un workspace Eclipse e seguire la guida di pmd.Attenzione: la guida dice di derivare una classe da AbstractRule (), ma in realtà questo metodo è deprecato e si deve derivare da AbstractJavaRule come indicato in
http://pmd.sourceforge.net/apidocs/net/sourceforge/pmd/AbstractRule.html e in http://sourceforge.net/projects/pmd/forums/forum/188192/topic/5120216
Per scrivere una rule con xpath fare riferimento all'articolo:
http://onjava.com/pub/a/onjava/2003/04/09/pmd_rules.html
da cui si vede che basta agire sul ruleset.xml:
XPath is a new language, though, so why write PMD rules using XPath when you're already a whiz-bang Java programmer? The reason is that it's a whole lot easier to write simple rules using XPath. To illustrate, here's the "DontCreateThreadsRule" written as an XPath expression://AllocationExpression[Name/@Image='Thread'][not(ArrayDimsAndInits)]
Concise, eh? There's no Java class to track--you don't have to compile anything or put anything else on yourCLASSPATH
. Just add the XPath expression to your rule definition like this:<?xml version="1.0"?> <ruleset name="My company's EJB checker rules"> <description> The Design Ruleset contains a collection of rules that find questionable designs. </description> <rule name="DontCreateThreadsRule" message="Don't create threads, use the MyCompanyThreadService instead" class="org.mycompany.util.pmd.DontCreateThreadsRule"> <description> Don't create Threads, use the MyCompanyThreadService instead. </description> <properties> <property name="xpath"> <value> <![CDATA[ //AllocationExpression[Name/@Image='Thread'][not(ArrayDimsAndInits)]> ]]> </value> </property> </properties> <example> <![CDATA[ Thread t = new Thread(); // don't do this! ]]> </example> </rule> </ruleset>
Refer to the rule as usual to run it on your source code.
Nessun commento:
Posta un commento