2013-04-05 26 views
11

Vorrei utilizzare lo stesso set di regole nel mio IDE (Eclipse) che il mio profilo Sonar.Impossibile importare il set di regole PMD in Eclipse

ho ottenuto il set di regole XML PMD dai Permalinks Sonar e vorrebbe importarlo nel mio PMD Eclipse Plugin, ma quando provo a farlo, il tasto "OK" si desactivated ...

Can't import a PMD Ruleset in PMD Eclipse Plugin

Qualcuno può aiutarmi?

risposta

13

Il problema potrebbe essere che Sonar sta esportando il set di regole per il formato v4.x e il plugin Eclipse li attende nel formato v5.x.

prova a modificare le regole da:

<rule ref="rulesets/basic.xml/UnusedNullCheckInEquals"> 
    <priority>3</priority> 
</rule> 

a

<rule ref="rulesets/java/basic.xml/UnusedNullCheckInEquals"> 
    <priority>3</priority> 
</rule> 

Si prega di notare l'arbitro dell'attributo . Un semplice trovare e sostituire tutto andrà bene per te.

+0

Ho appena provato questo con SonarQube 3.7 ed Eclipse Kepler e non ha funzionato. Qualche aggiornamento su questa risposta? –

+0

Inoltre, potrebbe essere necessario utilizzare le risposte di Dove e KrishPrabakar di seguito. Inoltre, è stato modificato anche quanto segue: Le regole UnusedPrivateField, UnusedLocalVariable, UnusedPrivateMethod, UnusedFormalParameter, UnusedModifier spostato da controversial.xml a unusedcode.xml. La regola design.xml/UseSingleton è stata modificata in design.xml/UseUtilityClass –

-1

Perché non usi Sonar Eclipse? Non dovresti preoccuparti della sincronizzazione dei set di regole.

+1

Ma con Sonar Eclipse i Ci vorrà molto tempo per eseguire il test completo. Qui voglio usare i 3 singoli plugin (PMD, CheckStyle, Findbugs) perché posso eseguirlo su un particolare pacchetto .. (Grazie per il tuo aiuto) –

+1

Bene, ok ... Quindi scusami, non posso aiutarti di più su questo come PMD Eclipse è fuori dal mio scopo. Proprio come informazione: stiamo lavorando sodo per migliorare Sonar Eclipse per poter eseguire analisi incrementali :) –

+1

Sarà davvero una grande funzionalità! Grazie mille per il tuo aiuto! Può anche essere interessante avere Sonar "Warnings" direttamente nel suo IDE (Eclipse). Perché è davvero noioso vedere un problema sul Sonar WebServer e poi dover cercare le righe di codice in questione nel suo IDE ... :-) –

0

La risposta di Ivan Nikolov è corretta. Il tuo problema sono diverse versioni del formato del set di regole. Nel mio caso stavo cercando di importare le regole esportate dal plugin PMD versione 3.2.6 nella versione 4.0.0 del plugin. Ecco i miei risultati:

  • Il cambio di percorso menzionato da Ivan Nikolov è necessario per tutte le regole. Fai attenzione perché non tutte le regole appartengono a java (ho visto anche le regole per XML, ...). Non sono così approfondito in PMD, quindi non so in quale versione siano state introdotte le regole per altre tecnologie.
  • È utile esportare il set di regole predefinito del plugin PMD 4.0.0 per il confronto con il vecchio file del set di regole personalizzato. In questo modo puoi correggere i problemi che possono essere individuati al prossimo punto.
  • Durante il tuo comportamento è stata generata un'eccezione che non è stata visualizzata. Questa eccezione può essere visualizzata nel file di registro dell'area di lavoro (/.metadata/.log) alla fine. Questo può darti un'idea di cosa altro deve essere cambiato. Usa il punto precedente per scoprire come risolvere i problemi. Nel mio caso è stato cambiato il percorso di una regola da a

Dopo queste modifiche sono stato in grado di importare migrato manualmente file di set di regole personalizzate in PMD plug 4.0.0.

Spero che questo aiuti.

BTW: trovo 4.0.0 versione del plug-in PMD molto buggy quindi ho declassato di nuovo a 3.2.6

3

Il consiglio da Ivan Nikolov mi ha aiutato, ma ho dovuto cambiare anche una sola regola da:

<rule ref="rulesets/java/controversial.xml/UnusedModifier"> 
    <priority>5</priority> 
</rule> 

a

<rule ref="rulesets/java/unusedcode.xml/UnusedModifier"> 
    <priority>5</priority> 
</rule> 

Ecco il mio file di configurazione PMD dal sonar che sta lavorando per me con PMD-plug 4.0.2.:

<?xml version="1.0" encoding="UTF-8"?> 
<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     name="pmd-eclipse" 
     xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> 
    <rule ref="rulesets/java/basic.xml/UnusedNullCheckInEquals"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/StringInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/ReplaceEnumerationWithIterator"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNullPointerException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/CompareObjectsWithEquals"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UseIndexOfChar"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/BigIntegerInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/SuspiciousEqualsMethodName"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/InstantiationToGetClass"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/SuspiciousHashcodeMethodName"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/coupling.xml/LooseCoupling"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/SingularField"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/CloseResource"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingThrowable"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/CollapsibleIfStatements"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/UselessOperationOnImmutable"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/UselessOverridingMethod"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedModifier"> 
    <priority>5</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/PreserveStackTrace"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/optimizations.xml/UseArraysAsList"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/EqualsNull"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/BrokenNullCheck"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/logging-jakarta-commons.xml/UseCorrectExceptionLogging"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/InefficientStringBuffering"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/sunsecure.xml/ArrayIsStoredDirectly"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/controversial.xml/DontImportSun"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/imports.xml/DontImportJavaLang"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/optimizations.xml/UseArrayListInsteadOfVector"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/StringToString"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/SimplifyConditional"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/ReplaceVectorWithList"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/codesize.xml/NcssMethodCount"> 
    <priority>3</priority> 
    <properties> 
     <property name="minimum" value="50" /> 
    </properties> 
    </rule> 
    <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/MethodWithSameNameAsEnclosingClass"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/SuspiciousConstantFieldName"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/codesize.xml/NcssTypeCount"> 
    <priority>3</priority> 
    <properties> 
     <property name="minimum" value="800" /> 
    </properties> 
    </rule> 
    <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/IntegerInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/AvoidAssertAsIdentifier"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/UnnecessaryLocalBeforeReturn"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/BooleanInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/UnconditionalIfStatement"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/ReplaceHashtableWithMap"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/IdempotentOperations"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UseStringBufferLength"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/AvoidEnumAsIdentifier"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/logging-java.xml/SystemPrintln"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UselessStringValueOf"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/AvoidDuplicateLiterals"> 
    <priority>3</priority> 
    </rule> 
</ruleset> 
+0

Ciò ha funzionato per me, grazie mille. –

0

In aggiunta a ciò che gli altri hanno detto, si può anche avere a trovare questo:

net.sourceforge.pmd.rules.XPathRule 

e sostituirla con la presente:

net.sourceforge.pmd.lang.rule.XPathRule 
1

ho dovuto aggiungere la lingua le mie regole XPath, ad esempio:

<rule name="DontUseDate" language="java" class="net.sourceforge.pmd.lang.rule.XPathRule" ...></rule>