lunedì 17 settembre 2012

Integrare PMD nelle build di Eclipse

Ho installato il plugin di PMD su Eclipse, ma per eseguire l'anaalisi devo lanciare esplicitamente PMD.
Vorrei invece che pmd eseguisse l'analisi contestualmente alla build, senza che glielo chieda esplicitamente.

Ho pensato ad uno script ANT, ma anche in questo modo dovrei fare una configurazione ad ogni nuovo progetto.
Allora ho trovato un metodo più semplice: i builders.
Se non ho capito male occorre eseguire i seguenti passi:

1. Aggiungere due sezione al file .project:


<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>prova2</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>net.sourceforge.pmd.eclipse.plugin.pmdBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>net.sourceforge.pmd.eclipse.plugin.pmdNature</nature>
</natures>
</projectDescription>


2. Aggiungere un file .pmd nella root del progetto:

<?xml version="1.0" encoding="UTF-8"?>
<pmd>
    <useProjectRuleSet>true</useProjectRuleSet>
    <ruleSetFile>.ruleset</ruleSetFile>
    <includeDerivedFiles>false</includeDerivedFiles>
    <violationsAsErrors>true</violationsAsErrors>
</pmd>

3. Aggiungere il file .ruleset nella root del progetto contenenti le regole da applicare:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://pmd.sf.net/ruleset/1.0.0" name="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd">
   <description/>
   <rule ref="rulesets/controversial.xml/NullAssignment"/>
   <rule ref="rulesets/controversial.xml/UnnecessaryConstructor"/>
   <rule ref="rulesets/finalizers.xml/AvoidCallingFinalize"/>
   <rule ref="rulesets/finalizers.xml/EmptyFinalizer"/>
   <rule ref="rulesets/finalizers.xml/FinalizeDoesNotCallSuperFinalize"/>
   <rule ref="rulesets/finalizers.xml/FinalizeOnlyCallsSuperFinalize"/>
   <rule ref="rulesets/finalizers.xml/FinalizeOverloaded"/>
</ruleset>



In questo modo l'analisi viene eseguita insieme alla build e i risultati sono visibili direttamente sull'IDE di Eclipse.

A volte ci sono dei problemi di sincronizzazione, ma nel complesso mi sembra funzionare.

Resta da capire come far sì che tutti i progetti Eclipse ereditino queste impostazioni.

vedi anche:
http://sourceforge.net/projects/pmd-eclipse/forums/forum/457016/topic/5326905
http://www.smartics.eu/config-smartics-pmd/
_________________________________________________________________
Template:
http://stackoverflow.com/questions/2092200/project-templates-eclipse-java

Nessun commento: